Afin d'amener bash à ignorer les erreurs pour des commandes spécifiques, vous pouvez dire :
some-arbitrary-command || true
Cela permettrait au script de continuer. Par exemple, si vous avez le script suivant :
$ cat foo
set -e
echo 1
some-arbitrary-command || true
echo 2
En l'exécutant, on obtient :
$ bash foo
1
z: line 3: some-arbitrary-command: command not found
2
En l'absence de || true
dans la ligne de commande, il aurait produit :
$ bash foo
1
z: line 3: some-arbitrary-command: command not found
Citation du manuel :
L'interpréteur de commandes ne se termine pas si la commande qui échoue fait partie de l'ensemble des commandes de l'utilisateur. qui suit immédiatement une commande while
o until
mot-clé, qui fait partie de le test dans un if
qui fait partie de toute commande exécutée dans une &&
ou ||
sauf la commande qui suit la dernière &&
o ||
toute commande dans un pipeline, à l'exception de la dernière, ou si le statut de retour de la commande est inversé avec !
. Un piège sur ERR
si elle est définie, est exécutée avant que le shell l'interpréteur de commandes.
EDIT : Afin de modifier le comportement de manière à ce que l'exécution se poursuive. seulement si exécution de some-arbitrary-command
a retourné file not found
dans le cadre de l'erreur, vous pouvez dire :
[[ $(some-arbitrary-command 2>&1) =~ "file not found" ]]
À titre d'exemple, exécutez ce qui suit (aucun fichier nommé MissingFile.txt
existe) :
$ 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
Cela produit le résultat suivant :
$ bash foo
1
2
rm: cannot remove `MissingFile.txt': No such file or directory
Notez que echo 2
a été exécuté mais echo 3
ne l'était pas.