Kommentare in einem mehrzeiligen Bash-Befehl


32

Diese BASH-Skriptdatei mit nur einem Befehl ist schwer zu verstehen. Daher möchte ich zu jeder Aktion einen Kommentar schreiben:

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

(sed ist nur ein Beispiel, eigentlich ist es eine Mischung aus greps und trs und awks)

Ich würde es hassen, Zeilen duplizieren zu müssen oder jeden Kommentar weit von der Zeile entfernt zu haben, auf die er zutrifft.
Gleichzeitig scheint BASH jedoch keine "Inline" -Kommentare zuzulassen.

Irgendeine elegante Möglichkeit, dieses Problem zu lösen?

Antworten:


51

Fügen Sie die Pfeifen am Ende der Zeile mit den Kommentaren dahinter ein:

$ 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


15

Wenn Sie diese Frage beim Kommentieren eines mehrzeiligen Befehls ohne Pipeline beantworten:

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

Wenn Sie nicht etwas wirklich Perverses tun, wie das Automatisieren von Kommentaren, kann ich keinen Grund sehen, dies Mikel's Antwort für eine Pipe vorzuziehen, aber wenn Sie wirklich wollten:

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

oder:

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

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


10

Nun, ich bevorzuge diesen Weg,

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/' 
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.