La commande deux-points en Bash

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.

Ça peut vous intéresser aussi


Netcat, créez votre serveur en BASH

Bash est puissant, très puissant. Les commandes et utilisations sont vastes ...


Sauvegarde automatisé en Bash

On m’a demandé hier soir sur un canal IRC ...


Pool de thread en bash

Créer un pool de thread est une opération toujours un ...


Passer une commande en arrière plan

Petit ticket rapidos pour ceux qui se posent la question....

Merci de m'aider à financer mes services

Si vous avez apprécié cet article, je vous serai reconnaissant de m'aider à me payer une petite bière :)

Si vous voulez en savoir plus sur l'utilisation de flattr sur mon blog, lisez cette page: Ayez pitié de moi

Commentaires

Ajouter un commentaire

Ajouter un commentaire

(*) Votre e-mail ne sera ni revendu, ni rendu public, ni utilisé pour vous proposer des mails commerciaux. Il n'est utilisé que pour vous contacter en cas de souci avec le contenu du commentaire, ou pour vous prévenir d'un nouveau commentaire si vous avez coché la case prévue à cet effet.