Come commentare i comandi multilinea negli script di shell?


19

Quando si invocano comandi lunghi e pesanti, è buona norma scriverli negli script di shell. Esiste un modo semplice per commentare le righe in tali script? Ho provato i seguenti metodi, ma nessuno dei due funziona.

# 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
shell 

1
Il secondo fa sì che uno spazio venga inviato come argomento ( \ sfugge al carattere successivo, che "nasconde" le nuove linee ma rende gli spazi significativi).
geekosaur,

Risposte:


14

Questa potrebbe essere un'opzione: memorizza il comando e args in un array, quindi eseguilo dopo

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

# execute it
"${cmd[@]}"

Questo è bashsolo ...
Socob,

3

Ho sempre spostato quelli commentati subito dopo il comando.

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

0

Il problema è che le barre vengono rimosse prima che la riga venga analizzata, quindi il primo comando viene analizzato come se avessi scritto command #--bad-switch --good-switch. Se hai una sequenza di comandi davvero lunga, potresti ad esempio scrivere un blocco di commenti riga per riga sopra o sotto di esso, spiegandoli a turno, oppure puoi memorizzare i parametri in una variabile (anche se questo spesso dà citazioni di mal di testa con personaggi speciali).


1
Questo non sembra essere il caso. --good-switchviene interpretato come un comando.


0

un commento frena la catena di linee collegate, quindi la soluzione più semplice sarebbe quella di spostare le linee commentate alla fine dell'elenco.

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

Se non si desidera modificare l'ordine, è possibile utilizzare il :comando (l'utilità due punti, che non fa nulla) per mantenere intatte le linee connesse:

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

Ho provato con questo:

function command { 
  echo "num args:" $#;
}
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.