supprimer code erreur commande bash
Le
Christophe PEREZ

Bonjour,
Y a-t-il mieux, pour supprimer le code d'erreur (pas le message) d'une
commande bash que "commande || true" ?
Pour que ma demande ne semble pas trop surprenante à ceux qui aiment
toujours remettre en cause le bienfondé des questions, c'est pour mettre
dans une configuration de système de sauvegarde (bacula) du genre :
bash -c 'ls -d /repertoire/qui/peut/ne/pas/exister || true'
dans une config générique qui sert à toutes les machines, mais qui pour
certaines renvoie une erreur (sans le || true) si le chemin n'existe pas,
mais surtout, interrompt totalement l'ensemble de la sauvegarde.
Ça m'évite de faire une config par machine, plus compliqué à maintenir,
sans toutefois être obligé de créer ces répertoires vides, juste pour que
la sauvegarde n'échoue pas.
Mais s'il n'y a pas mieux/plus propre que le "|| true", je laisse comme
ça.
Y a-t-il mieux, pour supprimer le code d'erreur (pas le message) d'une
commande bash que "commande || true" ?
Pour que ma demande ne semble pas trop surprenante à ceux qui aiment
toujours remettre en cause le bienfondé des questions, c'est pour mettre
dans une configuration de système de sauvegarde (bacula) du genre :
bash -c 'ls -d /repertoire/qui/peut/ne/pas/exister || true'
dans une config générique qui sert à toutes les machines, mais qui pour
certaines renvoie une erreur (sans le || true) si le chemin n'existe pas,
mais surtout, interrompt totalement l'ensemble de la sauvegarde.
Ça m'évite de faire une config par machine, plus compliqué à maintenir,
sans toutefois être obligé de créer ces répertoires vides, juste pour que
la sauvegarde n'échoue pas.
Mais s'il n'y a pas mieux/plus propre que le "|| true", je laisse comme
ça.
Je trouve que c'est sur ce point qu'il vaudrait mieux réfléchir avant de
cacher l'erreur.
Et bien j'ai cherché, mais ça semble être le processus normal de bacula.
S'il y a une erreur en résultat d'une commande sur le "fileset", il ne
lance pas la sauvegarde.
J'utilise bacula depuis pas mal d'années. Tout fonctionne très bien. J'ai
juste installé une nouvelle machine, et oublié de créer ces répertoires
vides, et du coup, la sauvegarde a échoué. Je me suis dit qu'il serait
donc peut-être bien que je fasse en sorte que l'absence de ce répertoire
(et là seulement) ne provoque pas l'erreur qui empêche la sauvegarde.
Je ne vois pas trop le risque que je prends.
Ça me semble plus propre de faire un test sur l'existence du répertoire
avant de lancer ta commande. Parce qu'une commande a plusieurs raisons
d'échouer. Et puis tu peux en profiter pour éviter de sauvegarder des
répertoires vides en t'assurant que si le répertoire existe, il contient
des fichiers.
--
Si vous avez du temps à perdre :
https://scarpet42.gitlab.io
Certes. Je vais réfléchir à la façon de mettre ça en place.
Mais sinon, pour répondre à ma question initiale, tu ne vois pas mieux
que le "|| true" ?
Ben si, de faire un test sur l'existence du répertoire avant de lancer
la commande. Si tu veux avoir ta commande dans le crontab, ça va être
assez subtile de faire tout tenir sur une ligne. Mais si le but est de
lancer un script à partir du crontab, c'est facile. L'avantage du
script, c'est que tu peux le faire évoluer sans avoir à modifier ton
crontab.
--
Si vous avez du temps à perdre :
https://scarpet42.gitlab.io
Ca ne va pas forcément résoudre le problème, car
[ -d dossier ] && ls dossier
va renvoyer une erreur si le test échoue.
--
"...sois ouvert aux idées des autres pour peu qu'elles aillent dans le
même sens que les tiennes." (ST sur fr.bio.medecine)
"Je suis ATARIste, et j'ai bien l'intention que l'on me respecte ici."
(FLC sur fr.comp.sys.atari)
non atomique, faire plutôt `cd répertoire && suite', dans ce cas.
non atomique, faire plutôt `cd répertoire && suite', dans ce cas.
ou if cd répertoire; then
else; fi
si l'on veut éviter l'abord dû au set -e
Non atomique, faire plutôt `cd répertoire && suite', dans ce cas.
ou if cd répertoire; then
else; fi
si l'on veut éviter l'abort dû au set -e
if [ -d dossier ] ; then ls dossier ; fi
ne renverra pas d'erreur intempestive.
--
Travailler donc pour la gloire, et qu'un solide gain
Ne soit jamais l'objet d'un illustre écrivain.
-+- Nicolas Boileau, Art poétique -+-