L'esecuzione di exec echo "some "; echo "test"
in bash non stampi mai "qualche prova"?
Cercherei conferma a questa domanda, poiché sto scrivendo un piccolo script di shell e vorrei che non continuasse a fare nulla dopo exec
comando è stato chiamato.
Penso che non dovrei preoccuparmi, come ho capito, dopo aver consultato:
man 3 exec
man 1p exec
Gli script della shell, quando eseguiti dalla shell, creeranno
- la shell esegue il programma
exec
, che - usa il
exec***
chiamate di sistema familiari che sostituiscono la shell/bash che ha eseguito lo script, con questo impedimento ulteriori azioni della shell (che è stata “sostituita”)
Come spiegato in precedenza, l'obiettivo principale di questa domanda è cercare conferma per il mio ragionamento per evitare che qualcosa nello script si verifichi dopo l'exec (come echo test
) verrebbe eseguito.
Apprezzerei una risposta generale (POSIX), per quanto possibile, ma solo in caso di particolarità sono più interessato a GNU/Linux e GNU/Bash
Risposta accettata:
exec
finisce sempre lo script se esegue un comando e lo fa con successo (non correlato al codice di uscita del comando ma all'avvio).
exec
può essere eseguito senza un comando in un modo molto utile:Per reindirizzare permanentemente i descrittori di file:
exec 3>/path/to/file
Se il comando non può essere avviato, il comportamento della shell dipende dalla configurazione. bash
esce per impostazione predefinita.
Potrebbe essere meglio utilizzare una funzione:
safe_exec () {
cmd="$1"
if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
exit 1
else
exec "[email protected]"
fi
}
safe_exec echo "some "; echo "test"