En mi proyecto tengo el siguiente fragmento:
local output="$(bash "${1##*/}")"
echo "$?"
Esto siempre imprime cero debido a que local
, sin embargo, la eliminación local
hace que la $?
variable se comporte correctamente: lo que supone asumir el código de salida de la subshell.
Mi pregunta es: ¿cómo puedo mantener esta variable local y al mismo tiempo capturar el valor de salida?
bash
variable
exit-status
Halcón supremo
fuente
fuente
shellcheck
no solo detectará este problema, sino que sugerirá la solución en unix.stackexchange.com/a/281749/24718 .Respuestas:
Esto hará eco
127
, el código de error correcto para "comando no encontrado".Puede usar
local
para definir más de una variable. Así que también creo la variable localRET
para capturar el código de salida de la subshell antes de tenerlocal
éxito y establece$?
en cero.fuente
bash
evalúa esta expresión de izquierda a derecha?bash
el manual de referencia.Declare la variable local antes de asignarla:
En mi opinión, esto también es más legible que establecer una
RET
variable adicional . YMMV en eso, pero funciona exactamente como cabría esperar.fuente
local var1 var2 ...
y Bob es su tío.