Al fine di evitare che bash di ignorare l'errore per comandi specifici si può dire:
some-arbitrary-command || true
Ciò renderebbe lo script continuare. Per esempio, se avete il seguente script:
$ cat foo
set -e
echo 1
some-arbitrary-command || true
echo 2
esecuzione che sarebbe tornato:
$ bash foo
1
z: line 3: some-arbitrary-command: command not found
2
In assenza di || true
nella linea di comando, che sarebbe potuto produrre:
$ bash foo
1
z: line 3: some-arbitrary-command: command not found
Citazione da manual:
la shell non esce se il comando che fallisce è parte della lista comando immediatamente dopo un while
o until
parola, parte prova in un if
dichiarazione, parte di qualsiasi comando eseguito in un elenco &&
o ||
eccetto il comando che segue l'ultimo &&
o ||
, qualsiasi comando in una pipeline ma l'ultimo, o se lo stato di ritorno del comando è invertito con !
. Una trappola su ERR
, se impostata, viene eseguita prima delle uscite della shell .
EDIT: Al fine di modificare il comportamento in modo tale che nella esecuzione dovrebbe continuare solo se esecuzione some-arbitrary-command
restituito file not found
come parte dell 'errore, si può dire:
[[ $(some-arbitrary-command 2>&1) =~ "file not found" ]]
A titolo di esempio, eseguire il seguente (nessun file chiamato MissingFile.txt
esiste):
$ cat foo
#!/bin/bash
set -u
set -e
foo() {
rm MissingFile.txt
}
echo 1
[[ $(foo 2>&1) =~ "No such file" ]]
echo 2
$(foo)
echo 3
Questo produce il seguente output:
$ bash foo
1
2
rm: cannot remove `MissingFile.txt': No such file or directory
Nota che echo 2
fu eseguito, ma non era echo 3
.
Fa [questo] (http://stackoverflow.com/questions/64786/error-handling-in-bash) aiuto? E, benvenuto in SO! :) –
Questo aiuta a migliorare la segnalazione degli errori, ma non include nulla per gestire errori diversi in un altro maniero. Sto essenzialmente cercando di imitare il try {} catch {} da C# – Stunt