Комментарии в многострочной команде bash


32

Этот файл командного сценария BASH сложен для понимания, поэтому я хочу написать комментарий для каждого из действий:

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

(sed - просто пример, на самом деле это смесь greps, trs и awks)

Я бы не хотел дублировать строки или размещать каждый комментарий далеко от той строки, к которой он относится.
Но в то же время BASH, похоже, не допускает «встроенных» комментариев.

Любой изящный способ решить эту проблему?

Ответы:


51

Поместите трубы в конце строки с комментариями после нее:

$ 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

имеет смысл, так как ожидается, что что-то пойдет по трубе
MrCholo

15

Если вы столкнулись с этим вопросом, пытаясь прокомментировать многострочную команду, не относящуюся к трубопроводу:

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

Если вы не делаете что-то действительно извращенное, например, автоматизируете комментирование, я не вижу причин, чтобы предпочесть это, а не ответ Микеля за канал, но если вы действительно хотели:

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

или:

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

Источник: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html


10

Ну, я предпочитаю этот путь,

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/' 
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.