web-dev-qa-db-fra.com

Commenter un ensemble de lignes dans un script Shell

Je me demandais s'il y avait un moyen de commenter un ensemble de lignes dans un script Shell ... Comment puis-je faire cela? Nous pouvons utiliser/* */dans d'autres langages de programmation . Ceci est très utile lorsque je convertis/utilise/modifie un autre script Et que je veux conserver les lignes d'origine au lieu de les supprimer.

Trouver et préfixer # pour toutes les lignes qui ne sont pas utilisées semble compliqué.

Disons qu'il y a 100 lignes dans le script dans des lignes conséquentes qui ne doivent pas être utilisées ..__ Je veux les commenter en une fois. Est-ce possible?

49
Vijay
if false
then

...code...

fi

false renvoie toujours false, donc le code sera toujours ignoré.

46
Artelius

La méthode la plus polyvalente et la plus sûre consiste à mettre le commentaire dans un vide cité here-document, comme ceci:

<<"COMMENT"
    This long comment text includes ${parameter:=expansion}
    `command substitution` and $((arithmetic++ + --expansion)).
COMMENT

Il est nécessaire de citer le délimiteur COMMENT ci-dessus pour empêcher le développement du paramètre , Le remplacement des commandes et le développement arithmétique, ce qui se produirait sinon, comme Bash manuel États et POSIX Shell standard spécifie .

Dans le cas ci-dessus, ne pas citer COMMENT aurait pour résultat que la variable parameter.__ serait affectée au texte expansion, si elle était vide ou non définie, en exécutant la commande command substitution, incrémentant la variable arithmetic et décrémentant .expansionvariable__.

En comparant d'autres solutions à ceci:

Pour utiliser if false; then comment text fi, le texte du commentaire doit être Syntaxiquement correct, alors que les commentaires naturels ne le sont souvent pas, si Uniquement pour d'éventuelles apostrophes non équilibrées. Il en va de même pour : || { comment text } Construct.

Le fait de placer des commentaires dans un argument de commande vide entre guillemets, comme dans :'comment text', présente l'inconvénient d'incapacité à inclure des apostrophes. Les arguments Entre guillemets, comme dans :"comment text", sont toujours sujets à l’extension des paramètres, au remplacement de la commande .__ et à l’extension arithmétique, de la même manière que le contenu non mis entre guillemets Here et peuvent avoir les effets secondaires décrits plus haut.

L'utilisation de scripts et de fonctions d'éditeur pour préfixer automatiquement chaque ligne d'un bloc Avec un '#' a du mérite, mais ne répond pas exactement à la question.

44
spbnick

Vous pouvez également mettre des commentaires sur plusieurs lignes en utilisant:

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'

Selon la référence Bash pour Bourne Shell builtins

: (deux points)

: [arguments]

Ne rien faire à part développer des arguments et effectuer des redirections. Le statut de retour est zéro.

Merci à Ikram pour l'avoir signalé dans le post Le script shell a mis plusieurs commentaires de ligne

26
asev69

Vous pouvez utiliser un document 'ici' sans commande pour l'envoyer.

#!/bin/bash
echo "Say Something"
<<COMMENT1
    your comment 1
    comment 2
    blah
COMMENT1
echo "Do something else"

Référence Wikipedia

20
Buggabill

Les éditeurs de texte ont une fonctionnalité étonnante appelée rechercher et remplacer. Vous ne dites pas quel éditeur vous utilisez, mais comme les scripts Shell ont tendance à être * nix et que j'utilise VI, voici la commande pour commenter les lignes 20 à 50 de certains scripts Shell:

:20,50s/^/#/
9
kdgregory
: || {
your code here
your code here
your code here
your code here
}
4
jj_5698

Selon ce site :

#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU 
'

echo "Init..."
# rest of script
1
user2763554

Que faire si vous emballez simplement votre code dans la fonction?

Donc ça:

cd ~/documents
mkdir test
echo "useless script" > about.txt

Devient ceci:

CommentedOutBlock() {
  cd ~/documents
  mkdir test
  echo "useless script" > about.txt
}
1
Buksy

Selon l'éditeur que vous utilisez, certains raccourcis permettent de commenter un bloc de lignes.

Une autre solution consiste à placer votre code dans un bloc conditionnel "if (0)";)

0
Carlos Tasada