Est-il possible de conserver le dernier état de sortie de commande ( $?) inchangé après un test?
Par exemple, je voudrais faire:
command -p sudo ...
[ $? -ne 1 ] && exit $?
Le dernier exit $?doit retourner le statut de sortie sudo, mais à la place il retourne toujours 0(le code de sortie du test).
Est-il possible de le faire sans variable temporaire?
Un autre exemple pour clarifier davantage:
spd-say "$@"
[ $? -ne 127 ] && exit $?
Dans ce cas, je veux quitter uniquement si la première commande est trouvée (code de sortie! = 127). Et je veux quitter avec le spd-saycode de sortie réel (ce n'est peut-être pas le cas
0).
EDIT: J'ai oublié de mentionner que je préfère une solution de réclamation POSIX pour une meilleure portabilité.
J'utilise cette construction dans des scripts où je veux fournir des alternatives pour la même commande. Par exemple, consultez mon script crc32 .
Le problème avec les variables temporaires est qu'elles peuvent masquer d'autres variables et pour éviter que vous ne deviez utiliser des noms longs, ce qui n'est pas bon pour la lisibilité du code.
[ $? -ne 127 ] && exit $?)
sudocommande réussit (c'est-à-dire s'il se sudotermine avec le statut 0). Mais, dans votre code, le script continue de s'exécuter (ne se ferme pas) en cas de sudosuccès
commandet pas sudodu tout. C'est ce que signifie que je veux quitter uniquement si la première commande est trouvée (code de sortie! = 127) et est un retour spécifiécommand lorsque la commande qu'il appelle n'est pas trouvée. Je suppose que le problème est que l'invocation sudodans le cadre du test permet en premier lieu d' sudoécraser le retour commandet donc de biaiser le test.
if ! command -p sudo; then exit; fice qui aurait les mêmes résultats pour votre exemple.