Comment commenter des commandes multi-lignes dans des scripts shell?


19

Lors de l'appel de commandes longues et lourdes, il est recommandé de les écrire dans des scripts shell. Existe-t-il un moyen simple de commenter des lignes dans de tels scripts? J'ai essayé les méthodes suivantes, mais aucune ne fonctionne.

# 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
La seconde provoque l'envoi d'un espace en argument ( \ échappe au caractère suivant, qui "cache" les nouvelles lignes mais rend les espaces significatifs).
geekosaur

Réponses:


14

Cela pourrait être une option: stocker la commande et les arguments dans un tableau, puis l'exécuter aprè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[@]}"

C'est bash-seulement…
Socob

3

J'ai toujours déplacé les commentaires juste après la commande.

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

0

Le problème est que les barres obliques sont supprimées avant l'analyse de la ligne, de sorte que la première commande est analysée comme si vous l'aviez écrite command #--bad-switch --good-switch. Si vous avez une séquence de commandes très longue, vous pouvez par exemple écrire un bloc de commentaires ligne par ligne au- dessus ou en dessous, en les expliquant tour à tour, ou vous pouvez stocker les paramètres dans une variable (bien que cela donne souvent des maux de tête avec caractères spéciaux).


1
Cela ne semble pas être le cas. --good-switchest interprété comme une commande.


0

un commentaire freine la chaîne des lignes connectées, donc la solution la plus simple serait de déplacer les lignes commentées à la fin de la liste.

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

Si vous ne voulez pas changer l'ordre, vous pouvez utiliser la :commande (l'utilitaire deux-points, qui ne fait rien) pour garder les lignes connectées intactes:

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

J'ai testé avec ceci:

function command { 
  echo "num args:" $#;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.