J'ai piraté beaucoup de scripts shell, et parfois les choses les plus simples me déconcertent. Aujourd'hui, j'ai rencontré un script qui faisait un usage intensif de la commande :
intégrée de bash (deux points).
La documentation semble assez simple:
: (a colon) : [arguments]
Ne rien faire à part développer des arguments et effectuer des redirections. Le statut de retour est zéro.
Cependant, je n’avais auparavant vu cela que dans des démonstrations d’extension de coque. Le cas d'utilisation du script que j'ai rencontré utilisait beaucoup cette structure:
if [ -f ${file} ]; then
grep some_string ${file} >> otherfile || :
grep other_string ${file} >> otherfile || :
fi
Il y avait en fait des centaines de greps, mais ils sont plus ou moins identiques. Aucune redirection d'entrée / sortie n'est présente à part la structure simple ci-dessus. Aucune valeur de retour n'est vérifiée plus tard dans le script.
Je lis ceci comme une construction inutile qui dit "ou ne fait rien". A quoi bon mettre fin à ces greps avec "ou ne rien faire"? Dans quel cas cette construction entraînerait-elle un résultat différent de celui de simplement laisser tomber || :
toutes les instances?
:
une alternative àtrue
. Peuterrexit
- être est-il défini et l'auteur se fiche du statut de sortie de certaines commandes.