¿Es posible mantener $?
inalterado el último estado de salida del comando ( ) después de una prueba?
Por ejemplo, me gustaría hacer:
command -p sudo ...
[ $? -ne 1 ] && exit $?
El último exit $?
debería devolver el estado de salida de sudo, pero en su lugar siempre regresa 0
(el código de salida de la prueba).
¿Es posible hacer eso sin una variable temporal?
Otro ejemplo para aclarar más:
spd-say "$@"
[ $? -ne 127 ] && exit $?
En este caso, quiero salir solo si se encuentra el primer comando (código de salida! = 127
). Y quiero salir con el spd-say
código de salida real (puede que no lo sea
0
).
EDITAR: Olvidé mencionar que prefiero una solución de queja POSIX para una mejor portabilidad.
Utilizo esta construcción en scripts donde quiero proporcionar alternativas para el mismo comando. Por ejemplo, vea mi script crc32 .
El problema con las variables temporales es que podrían sombrear otras variables, y para evitar que debas usar nombres largos, lo que no es bueno para la legibilidad del código.
[ $? -ne 127 ] && exit $?
)
sudo
comando tiene éxito (es decir, si sudo
sale con el estado 0). Pero, en su código, el script sigue ejecutándose (no sale) si sudo
tiene éxito
command
y no sudo
en absoluto. Eso es lo que significa que quiero salir solo si se encuentra el primer comando (código de salida! = 127) y es un retorno especificado paracommand
cuando no se encuentra el comando que invoca. Supongo que el problema es que invocar sudo
como parte de la prueba permite sudo
aplastar el retorno command
en primer lugar y así sesgar la prueba.
if ! command -p sudo; then exit; fi
que tendría los mismos resultados para su ejemplo.