Comentarios en un comando bash de varias líneas

32

Este archivo de script BASH de un solo comando es difícil de entender, por lo que quiero escribir un comentario para cada una de las acciones:

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

(sed es solo un ejemplo, en realidad es una mezcla de greps y trs y awks)

Odiaría tener que duplicar líneas o tener cada comentario lejos de la línea a la que se aplica.
Pero al mismo tiempo, BASH no parece permitir comentarios "en línea".

¿Alguna forma elegante de resolver este problema?

Nicolas Raoul
fuente

Respuestas:

51

Ponga las tuberías al final de la línea con los comentarios despué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
fuente
tiene sentido, ya que se espera que algo siga la tubería
MrCholo
15

Si te encuentras con esta pregunta mientras buscas comentar un comando multilínea sin tubería:

$ 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`

A menos que esté haciendo algo realmente perverso como automatizar los comentarios, no puedo ver una razón para preferir esto a la respuesta de Mikel para una tubería, pero si realmente quisiera:

$ 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`

o:

$ 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`

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

ZakW
fuente
10

Bueno, prefiero de esta manera

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
fuente