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?

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

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


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/' 
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.