Como comentar comandos de várias linhas em scripts de shell?

19

Ao invocar comandos longos e pesados ​​de switch, é uma boa prática gravá-los em shell scripts. Existe uma maneira fácil de comentar linhas nesses scripts? Eu tentei os seguintes métodos, mas nenhum deles funciona.

# the \ is also commented out, resulting in "command" and "--good-switch".
command \
  #--bad-switch \
  --good-switch \

# seems to send an extra argument to the command
command \
  \ #--bad-switch \
  --good-switch

fonte
1
O segundo faz com que um espaço seja enviado como argumento ( \ escapa do próximo caractere, que "oculta" novas linhas, mas torna os espaços significativos).
Geekosaur

Respostas:

14

Pode ser uma opção: armazene o comando e os argumentos em uma matriz e execute-o após

# build the command
cmd=( ls
        -F
      # -a   # comment out this option temporarily
        -l
    )
# $cmd is now an array with 3 elements

# execute it
"${cmd[@]}"
Glenn Jackman
fonte
Isto é bashapenas ...
Socob 28/09
3

Eu sempre mudei os comentados logo após o comando.

command \
  --good-switch
# --bad-switch          with explanation here, if needed
geekosaur
fonte
0

O problema é que as barras são removidas antes da análise da linha; portanto, o primeiro comando é analisado como se você tivesse escrito command #--bad-switch --good-switch. Se você possui uma sequência realmente longa de comandos, pode escrever, por exemplo, um bloco de comentários linha a linha acima ou abaixo dele, explicando cada um deles, ou pode armazenar os parâmetros em uma variável (embora isso geralmente cause dores de cabeça entre aspas com caracteres especiais).

l0b0
fonte
1
Esse não parece ser o caso. --good-switché interpretado como um comando.
0

um comentário freia a cadeia de linhas conectadas; portanto, a solução mais simples seria mover as linhas comentadas no final da lista.

command \
  --good-switch \
  # --bad-switch \

Se você não quiser alterar a ordem, poderá usar o :comando (o utilitário de dois pontos, que não faz nada) para manter intactas as linhas conectadas:

command \
  `: --bad-switch `\
  --good-switch \

Eu testei com isso:

function command { 
  echo "num args:" $#;
}
rubo77
fonte