Commenti in un comando bash multilinea


32

Questo file di script BASH a comando singolo è difficile da capire, quindi voglio scrivere un commento per ciascuna delle azioni:

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

(sed è solo un esempio, in realtà è un mix di greps, trs e awk)

Odierei dover duplicare le righe o avere ogni commento lontano dalla riga a cui si applica.
Allo stesso tempo, BASH non sembra consentire commenti "in linea".

Un modo elegante per risolvere questo problema?

Risposte:


51

Metti i tubi alla fine della riga con i commenti dopo di esso:

$ 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

ha senso, dal momento che qualcosa dovrebbe seguire la pipa
MrCholo

15

Se ti capita di rispondere a questa domanda mentre cerchi di commentare un comando multilinea non di livello superiore:

$ 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 meno che tu non stia facendo qualcosa di veramente perverso come automatizzare i commenti, non vedo un motivo per preferire questo alla risposta di Mikel per una pipe, ma se davvero volessi:

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

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


10

Beh, preferisco così,

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/' 
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.