Dans mon projet, j'ai l'extrait suivant:
local output="$(bash "${1##*/}")"
echo "$?"
Cela affiche toujours zéro en raison de la local
suppression, cependant, local
entraîne le $?
comportement correct de la variable: ce qui suppose le code de sortie du sous-shell.
Ma question est: comment puis-je garder cette variable locale tout en capturant la valeur de sortie?
bash
variable
exit-status
Ultimate Hawk
la source
la source
shellcheck
ne détectera pas seulement ce problème mais suggérera la solution sur unix.stackexchange.com/a/281749/24718 !Réponses:
Cela fera écho
127
, le code d'erreur correct pour "commande introuvable".Vous pouvez utiliser
local
pour définir plusieurs variables. Je crée donc également la variable localeRET
pour capturer le code de sortie du sous-shell avant delocal
réussir et de mettre$?
à zéro.la source
bash
cette expression est évaluée de gauche à droite?bash
le manuel de référence.Déclarez la variable locale avant de lui affecter:
À mon avis, cela est également plus lisible que la définition d'une
RET
variable supplémentaire . YMMV là-dessus, mais cela fonctionne exactement comme vous vous en doutez.la source
local var1 var2 ...
et Bob est votre oncle.