Comentários em um comando bash de várias linhas

26

Este arquivo de script BASH de comando único é difícil de entender, portanto, quero escrever um comentário para cada uma das ações:

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

(sed é apenas um exemplo, na verdade é uma mistura de greps, trs e awks)

Eu odiaria ter que duplicar linhas ou ter cada comentário longe da linha a que se aplica.
Mas, ao mesmo tempo, o BASH não parece permitir comentários "in-line".

Alguma maneira elegante de resolver este problema?

    
por Nicolas Raoul 28.01.2011 / 06:41

3 respostas

42

Coloque os canais no final da linha com os comentários depois:

$ 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
    
por 28.01.2011 / 07:31
13

Se você tiver alguma dúvida sobre essa questão, ao comentar um comando non -pipeline multiline:

$ 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 você esteja fazendo algo realmente perverso como a automação de comentários, não vejo um motivo para preferir isso à resposta de Mikel para um pipe, mas se você realmente quisesse:

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

Fonte: link

    
por 30.05.2011 / 13:50
6

Bem, eu prefiro assim,

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/' 
}
    
por 11.11.2015 / 18:58