Komentarze w wieloliniowym poleceniu bash


32

Ten skrypt skryptowy BASH z jednym poleceniem jest trudny do zrozumienia, dlatego chcę napisać komentarz do każdej akcji:

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

(sed jest tylko przykładem, w rzeczywistości jest to połączenie greps, trs i awks)

Nie chciałbym powielać wierszy ani umieszczać każdego komentarza daleko od wiersza, którego dotyczy.
Ale jednocześnie BASH wydaje się nie dopuszczać komentarzy „w linii”.

Jakiś elegancki sposób na rozwiązanie tego problemu?

Odpowiedzi:


51

Umieść rury na końcu wiersza z komentarzami po nim:

$ 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

ma sens, ponieważ oczekuje się, że coś pójdzie za fajką
MrCholo

15

Jeśli zdarzy ci na to pytanie, patrząc na komentarz do non -pipeline polecenia wielowierszowego:

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

O ile nie robisz czegoś naprawdę przewrotnego, takiego jak automatyzowanie komentowania, nie widzę powodu, aby preferować to bardziej niż odpowiedź Mikela na fajkę, ale jeśli naprawdę chcesz:

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

lub:

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

Źródło: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html


10

Cóż, wolę w ten sposób

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/' 
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.