#1 Le 22/07/2019, à 14:37
- DonutMan75
[RESOLU] [BASH] quitter si le répertoire existe
Bonjour à tous,
j'ai laissé mon livre sur le bash au boulot... et du coup je bloque sur cette syntaxe "simple".
Si le répertoire $dout n'existe pas, je le crée et je continue l'exécution du script
Dans le cas contraire, j'affiche un message d'erreur et je quitte (code retour 1)
C'est précisément ce deuxième cas qui ne fonctionne pas...
Ca doit vraiment être tout bête mais je sèche....
Une idée ?? Merci d 'avance
[ ! -e "$dout" ] && mkdir "$dout" || ( echo "Output directory already exists !" ; exit 1 )
echo "on continue"
$ ./process_pictures.sh
Output directory already exists !
on continue
$ echo $?
0
Donut
Dernière modification par DonutMan75 (Le 22/07/2019, à 15:19)
Hors ligne
#2 Le 22/07/2019, à 15:08
- MicP
Re : [RESOLU] [BASH] quitter si le répertoire existe
Bonjour
En reformulant, ça donne :
Si le répertoire existe, j'affiche le message et j'arrête de suite l'exécution du script en sortant le code d'erreur 1 sur stderr
Sinon, j'exécute la suite du script :
je créé le répertoire
j'affiche le message "On continue"
[ -d "$dout" ] && { echo "Output directory already exists !"; exit 1; }
mkdir "$dout"
echo "On continue"
… -d fichier Vrai si le fichier existe et est un répertoire. -e fichier Vrai si le fichier existe. …
Dernière modification par MicP (Le 22/07/2019, à 16:29)
Hors ligne
#3 Le 22/07/2019, à 15:11
- choops
Re : [RESOLU] [BASH] quitter si le répertoire existe
Salut
Les associations de conditions avec des parenthèse, ça ne marche pas toujours.
Pour avoir le résultat attendu, il vaut mieux le faire avec des accolades et un point-virgule (attention à l'espace entre le ; et l'accollade de fermeture, sans lui ça ne marche pas): { <condition1> <operateur_logique1> <condition2> ; }
Du coup, avec ça, c'est bon:
[ ! -d "$dout" ] && mkdir "$dout" || { echo "Output directory already exists !" && exit 1 ; }
echo "on continue"
EDIT: MicP a été un poil plus rapide et pertinent en réorganisant les conditions. Pas besoin de faire passer la création de dossier parmi les conditions.
Dernière modification par choops (Le 22/07/2019, à 15:13)
Hors ligne
#4 Le 22/07/2019, à 15:18
- DonutMan75
Re : [RESOLU] [BASH] quitter si le répertoire existe
Hello, merci pour vos retours rapides et pertinents !!
je crois comprendre que dans mon code initial :
( echo "Output directory already exists !" ; exit 1 )
Le "exit 1" s'applique à l'ensemble de la parenthèse qui retourne la valeur 1... et non pas au programme complet !!
Quoiqu'il en soit, votre factorisation est de toute façon plus propre.
Merci encore et bonne fin d'aprem !
D.
Hors ligne
#5 Le 22/07/2019, à 16:27
- MicP
Re : [RESOLU] [BASH] quitter si le répertoire existe
…Le "exit 1" s'applique à l'ensemble de la parenthèse qui retourne la valeur 1... et non pas au programme complet !! …
Oui, ce qui est entre parenthèses est exécuté dans un sous-shell
Le "exit 1" ne concerne que le shell dans lequel il est exécuté <=> le sous-shell
=======
Alors qu'un bloc de commandes entre accolades ne lance pas un sous-shell.
{ commande1; commande2; commande3; ... }
Dernière modification par MicP (Le 22/07/2019, à 16:28)
Hors ligne