La commande deux-points en Bash

Publié le 18/11/2014

Que ce soit en bash, en sh, en ce que vous voulez, on trouve parfois des subtilités assez intéressantes pour peu qu’on se penche un peu sur les documentations. Une “commande” (oui s’en est une) que j’utilise souvent est “:“, c’est à dire “deux-point” ou en anglais “colon”. A quoi ça sert ? Je vous montre !

La commande “colon”, donc “:“, est extra, elle ne fait absolument rien ! Bon ok, en fait elle fait des choses, déjà elle retourne toujours “0” (zéro), donc elle réussit à tous les coups.

$ :
$ echo $?
0

La première chose à quoi m’a servi cette commande est simple, j’ai des scripts qui ne doivent pas planter, et ne doivent pas retourner autre chose qu’un succès, par exemple:

mkdir -p /tmp/test/machin || :

Quoiqu’il arrive, que la commande “mkdir” ait fonctionné ou pas, le retour est un EXIT_SUCCESS (donc zéro). C’est très utile par exemple dans des “entrypoint” de Docker.io

Mais si ça ne servait qu’à ça… autant utiliser la commande “true”. Sauf que “:” est vraiment un peu plus poussée, elle peut prendre des paramètres dont elle ne se sert pas. Du coup, on peut lui balancer une chaîne, ou une sortie de commande qu’elle n’affichera pas. Et du coup on commence à comprendre ce qu’on peut faire…

Je m’en sers pour taper un commentaire en plein milieu d’une commande:

command; command; : un commentaire rapide; command; command
# parce que la ligne suivante ne marche pas, le dièse commente la fin de ligne:
command; command; # un commentaire rapide; command; command

Ou alors, à faire un “while” rapidement

while :; do command; done

Une autre chose intéressante, remplacer une redirection de la sortie standard ! Je vous rappelle les faits: la commande prend en argument n’importe quoi, qu’elle n’affiche pas, donc:

# on peut faire
command | :

# equivalent à :
: `command`
: $(command)

Notez que ces commandes retournent toujours “0” même si la commande a planté ! C’est super intéressant pour lancer une commande dont on se fiche du résultat, et dont on se fiche de la sortie standard (STDERR continue à s’afficher)

Donc, que ce soit en conjonction avec un “&&” pour assurer un succès de sortie, pour commenter “en ligne” ou encore pour stripper la sortie standard, la commande “deux-points” (dites “colon” c’est plus pro :)) va vous faire plaisirs. A la longue, ça devient naturel.

comments powered by Disqus