He escrito un script rápido y sucio para cronometrar algunos informes de un servicio web:
BASE_URL='http://example.com/json/webservice/'
FIRST=1
FINAL=10000
for report_code in $(seq 1 $FINAL); do
  (time -p response=$(curl --write-out %{http_code} --silent -O ${BASE_URL}/${report_code}) ) 2> ${report_code}.time
  echo $response  # <------- this is out of scope!  How do I fix that?
  if [[ $response = '404' ]]; then
    echo "Deleting report # ${report_code}!"
    rm ${report_code}
  else
    echo "${report_code} seems to be good!"
  fi
done
Necesito ajustar el timecomando en un subshell para poder redirigir su salida, pero eso hace que el valor de $responseno esté disponible para el shell principal. ¿Cómo soluciono este problema?
                    
                        bash
                                shell
                                io-redirection
                                subshell
                                
                    
                    
                        iconoclasta
fuente
                
                
            fuente

{ … }lugar de una subshell( … ).Compañeros usuarios de U&L: antes de rechazar mi respuesta para usar el estilo C con la
main()función, visite este enlace: https://unix.stackexchange.com/a/313561/85039 El uso de las funciones principales en los scripts es una práctica común, utilizada por muchos profesionales en el campo.Como señaló Gilles, las subcapas no pueden hacer que las variables estén disponibles fuera de su entorno. Pero abordemos este problema desde otro ángulo: si escribe su script en funciones, es posible declarar variables como
localy eso se puede editar.Del manual de bash 4.3,
localdescripción:Ejemplo:
Como puede ver después de 3 iteraciones de la función de bucle, la variable se modifica.
fuente
outterreferirme a una instancia global devar."$var"No es necesario en la llamadaoutter. No hace nada Y tampocolocal var=0hace nada; la llamada oufouttersobrescribevar, como usted dijo."$var"como argumento posicional paraoutter; para ser justos, esto es por costumbre. ¿Se puede elaborar en cuanto alocal var=0parte?