mkdir build && cd build && touch blank.txt
En Bash (et dans d'autres shells et dans la plupart des langages de programmation de haut niveau) &&
est une logique y ce qui signifie que si la commande précédente renvoie un résultat positif, la commande suivante sera exécutée. Il existe également des commandes logiques ou ||
. Par exemple, vous pouvez combiner ces deux options en une seule déclaration :
mkdir /tmp/abc/123 && echo 'the dir is created' || echo "the dir isn't created"
Remarque : la construction cmd_1 && cmd_2 || comd_3
n'est pas un substitut de la if.. then.. else
car quelle que soit la commande précédente qui renvoie une valeur fausse, l'instruction cmd_3
sera exécutée. Vous devez donc faire attention aux circonstances dans lesquelles vous l'utilisez. Voici un exemple :
$ true && false || echo success
success
$ false && true || echo success
success
$ false && false || echo success
success
En règle générale, lorsque j'utilise l'option cd
dans un script, je mets un test pour savoir si le changement de répertoire est réussi : cd somewhere/ || exit
. Le test le plus approprié est proposé par @dessert : if ! cd dir; then exit 1; fi
. Mais dans tous les cas, pour se prémunir contre l'échec de script, il est préférable d'utiliser l'option set -e
telle qu'elle est présentée dans le Réponse de @mrks .
mkdir build; cd build; touch blank.txt
;
est un délimiteur de ligne et est utilisé lorsque plusieurs commandes séparées sont écrites sur une même ligne.
Noter quand ;
ou &&
et ||
sont utilisées, il n'est pas obligatoire d'écrire les commandes à la ligne - ceci est illustré dans la section Réponse de @allo .
En tout état de cause, il n'y a pas d'avantage ou de différence technique particulière entre le fait d'écrire les commandes sur une seule ligne ou sur des lignes séparées.
COMMAND="mkdir build && cd build && touch blank.txt"
eval ${COMMAND}
Ici, une ou plusieurs commandes (et leurs arguments) sont regroupées en tant que valeur d'une variable, puis cette variable (argument) est convertie en commande à l'aide de la fonction eval
. Vous pourrez ainsi modifier la commande qui sera exécutée plusieurs fois dans un script en la modifiant à un seul endroit.
Supposons que vous souhaitiez modifier la façon dont le fichier blank.txt
est créé, par exemple, vous pouvez modifier la ligne concernée de la manière suivante :
COMMAND="mkdir build && cd build && echo 'test' > blank.txt"
Les données réelles eval
's avantage sur l'utilisation de alias
c'est lorsqu'il y a re-directions, tuyaux, opérateurs logiques - à tous les opérateurs de flux de contrôle - en cours d'utilisation.
Dans la plupart des cas, vous pouvez utiliser functions
au lieu de eval
quand alias
n'est pas applicable. De même, si la variable ne contient qu'une seule commande, c'est-à-dire CMD="cat"
Nous n'avons pas besoin de eval
parce que le découpage en mots de Bash élargira le champ d'application de la loi. "$CMD" "$file1" "$file2"
correctement.