Comentários em um comando bash multi-line


26

Esse 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 "em linha".

Qualquer maneira elegante de resolver este problema?

Respostas:


44

Coloque os tubos 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

13

Se você acontecer sobre esta questão, enquanto olhando para comentar um não Comando multilinha -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`

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: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html


Muito bom - obrigado por apontar isso!
Brandon Rhodes

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/' 
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.