È possibile mantenere inalterato l'ultimo comando exit status ( $?
) dopo un test?
Ad esempio, vorrei fare:
command -p sudo ...
[ $? -ne 1 ] && exit $?
L'ultimo exit $?
dovrebbe restituire lo stato di uscita sudo, ma invece restituisce sempre 0
(il codice di uscita del test).
È possibile farlo senza una variabile temporanea?
Un altro esempio per chiarire ulteriormente:
spd-say "$@"
[ $? -ne 127 ] && exit $?
In questo caso voglio uscire solo se viene trovato il primo comando (codice di uscita! = 127
). E voglio uscire con il spd-say
codice di uscita effettivo (potrebbe non essere
0
).
EDIT: ho dimenticato di dire che preferisco una soluzione di reclamo POSIX per una migliore portabilità.
Uso questo costrutto negli script in cui desidero fornire alternative per lo stesso comando. Ad esempio, vedi il mio script crc32 .
Il problema con le variabili temporanee è che potrebbero oscurare altre variabili ed evitare che sia necessario utilizzare nomi lunghi, il che non è utile per la leggibilità del codice.
[ $? -ne 127 ] && exit $?
)
sudo
comando ha esito positivo (ovvero, se sudo
esce con lo stato 0). Ma, nel tuo codice, lo script continua a funzionare (non esce) se sudo
riesce
command
e sudo
per niente. Questo è ciò che si intende per voglio uscire solo se viene trovato il primo comando (codice di uscita! = 127) ed è un ritorno specificato percommand
quando il comando che invoca non viene trovato. Immagino che il problema sia che l'invocazione sudo
come parte del test consente di sudo
schiacciare il ritorno di command
in primo luogo e quindi distorcere il test.
if ! command -p sudo; then exit; fi
che avrebbe gli stessi risultati per il tuo esempio.