42 votes

Commentaires dans une commande bash multi-ligne

Ce fichier de script BASH à commande unique est difficile à comprendre, donc je veux écrire un commentaire pour chacune des actions :

echo 'foo'     \
| sed 's/d/a/' \
| sed 's/e/b/' \
| sed 's/f/c/' \
> myfile

(sed est juste un exemple, en réalité c'est un mélange de greps et de trs et de awks)

Je détesterais devoir dupliquer les lignes, ou avoir chaque commentaire loin de la ligne à laquelle il s'applique.
Mais en même temps, BASH ne semble pas permettre les commentaires "en ligne".

Y a-t-il un moyen élégant de résoudre ce problème ?

61voto

Mikel Points 8576

Placez les pipes à la fin de la ligne avec les commentaires qui suivent :

$ echo 'foo' |
sed 's/f/a/' | # changer le premier f en a
sed 's/o/b/' | # changer le premier o en b
sed 's/o/c/'   # changer le deuxième o en c
abc

19voto

ZakW Points 313

Si vous tombez sur cette question en cherchant à commenter une commande multiligne non-pipeline :

$ echo 'foo' |
sed -e 's/f/a/' `: # changer le premier f en a` \
    -e 's/o/b/' `: # changer le premier o en b` \
    -e 's/o/c/' `: # changer le deuxième o en c`

À moins que vous ne fassiez quelque chose de vraiment pervers comme commenter automatiquement, je ne vois pas de raison de préférer cela à la réponse de Mikel pour un pipe, mais si vous le voulez vraiment :

$ echo 'foo' |
sed 's/f/a/' | `: # changer le premier f en a` \
sed 's/o/b/' | `: # changer le premier o en b` \
sed 's/o/c/'   `: # changer le deuxième o en c`

ou :

$ echo 'foo' |
sed 's/f/a/' `: # changer le premier f en a` |
sed 's/o/b/' `: # changer le premier o en b` |
sed 's/o/c/' `: # changer le deuxième o en c`

Source: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html

15voto

rox Points 261

Eh bien, je préfère cette façon,

echo 'foo' | {
  # changer le premier f en a
  # vous pouvez ajouter plusieurs lignes de commentaires sur les options de la commande
  sed 's/f/a/'
} | {
  # changer le premier o en b
  sed 's/o/b/'
} | {
  # changer le deuxième o en c
  sed 's/o/c/' 
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X