Commentaires dans une commande bash sur plusieurs lignes

32

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

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

(sed n'est qu'un exemple, en fait c'est un mélange de greps et très et awks)

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

Une manière élégante de résoudre ce problème?

Nicolas Raoul
la source

Réponses:

51

Mettez les tuyaux à la fin de la ligne avec les commentaires après:

$ echo 'foo' |
sed 's/f/a/' | # change first f to a
sed 's/o/b/' | # change first o to b
sed 's/o/c/'   # change second o to c
abc
Mikel
la source
est logique, car quelque chose devrait suivre la pipe
MrCholo
15

Si vous rencontrez cette question tout en cherchant à commenter une commande multiligne non- pipeline:

$ echo 'foo' |
sed -e 's/f/a/' `: # change first f to a` \
    -e 's/o/b/' `: # change first o to b` \
    -e 's/o/c/' `: # change second o to c`

À moins que vous ne fassiez quelque chose de vraiment pervers comme l'automatisation des commentaires, je ne vois pas de raison de préférer cela à la réponse de Mikel pour un tuyau, mais si vous vouliez vraiment:

$ echo 'foo' |
sed 's/f/a/' | `: # change first f to a` \
sed 's/o/b/' | `: # change first o to b` \
sed 's/o/c/'   `: # change second o to c`

ou:

$ echo 'foo' |
sed 's/f/a/' `: # change first f to a` |
sed 's/o/b/' `: # change first o to b` |
sed 's/o/c/' `: # change second o to c`

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

ZakW
la source
10

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

echo 'foo' | {
  # change first f to a
  # you can add more lines of comment on the command options
  sed 's/f/a/'
} | {
  # change first o to b
  sed 's/o/b/'
} | {
  # change second o to c
  sed 's/o/c/' 
}
rox
la source