Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

supprimer code erreur commande bash

40 réponses
Avatar
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.

10 réponses

1 2 3 4
Avatar
Nicolas George
Christophe PEREZ , dans le message <rffssr$dqp$, a
écrit :
mais surtout, interrompt totalement l'ensemble de la sauvegarde.

Je trouve que c'est sur ce point qu'il vaudrait mieux réfléchir avant de
cacher l'erreur.
Avatar
Christophe PEREZ
Le Sat, 25 Jul 2020 08:36:00 +0000, Nicolas George a écrit :
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.
Avatar
Stéphane CARPENTIER
Le 25-07-2020, Christophe PEREZ a écrit :
Le Sat, 25 Jul 2020 08:36:00 +0000, Nicolas George a écrit :
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
Avatar
Christophe PEREZ
Le Sat, 25 Jul 2020 21:58:01 +0000, Stéphane CARPENTIER a écrit :
Ç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.

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" ?
Avatar
Stéphane CARPENTIER
Le 25-07-2020, Christophe PEREZ a écrit :
Le Sat, 25 Jul 2020 21:58:01 +0000, Stéphane CARPENTIER a écrit :
Ç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.

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
Avatar
pehache
Le 25/07/2020 à 23:58, Stéphane CARPENTIER a écrit :
Le 25-07-2020, Christophe PEREZ a écrit :
Le Sat, 25 Jul 2020 08:36:00 +0000, Nicolas George a écrit :
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.

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)
Avatar
Marc SCHAEFER
Stéphane CARPENTIER wrote:
Ben si, de faire un test sur l'existence du répertoire avant de lancer
la commande.

non atomique, faire plutôt `cd répertoire && suite', dans ce cas.
Avatar
Marc SCHAEFER
Stéphane CARPENTIER wrote:
Ben si, de faire un test sur l'existence du répertoire avant de lancer
la commande.

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
Avatar
Marc SCHAEFER
Stéphane CARPENTIER wrote:
Ben si, de faire un test sur l'existence du répertoire avant de lancer
la commande.

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
Avatar
Jo Engo
Le Sun, 26 Jul 2020 08:11:55 +0200, pehache a écrit :
[ -d dossier ] && ls dossier
va renvoyer une erreur si le test échoue.

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 -+-
1 2 3 4