web-dev-qa-db-fra.com

Commentaires en ligne pour Bash?

J'aimerais pouvoir commenter un seul drapeau dans une commande d'une ligne. Bash ne semble avoir que des commentaires from # till end-of-line. Je regarde des astuces comme:

ls -l $([ ] && -F is turned off) -a /etc

C'est moche, mais mieux que rien. Y a-t-il un meilleur moyen?

Ce qui suit semble fonctionner, mais je ne sais pas s'il est portable:

ls -l `# -F is turned off` -a /etc
115
Lajos Nagy

Mon préféré est:

Commenter dans un script Bash

Cela aura des frais généraux, mais techniquement cela répond à votre question

echo abc `#put your comment here` \
     def `#another chance for a comment` \
     xyz etc

Et pour les pipelines en particulier, il existe une solution plus propre sans frais généraux

echo abc |        # normal comment OK here
     tr a-z A-Z | # another normal comment OK here
     sort |       # the pipelines are automatically continued
     uniq         # final comment

Comment mettre un commentaire de ligne pour une commande multiligne

76
Rafareino

Je trouve plus facile (et plus lisible) de simplement copier la ligne et commenter la version originale:

#Old version of ls:
#ls -l $([ ] && -F is turned off) -a /etc
ls -l -a /etc
55
Dan

$(: ...) est un peu moins laid, mais pas bon.

18

Que diriez-vous de le stocker dans une variable?

#extraargs=-F
ls -l $extraargs -a /etc
4
Karoly Horvath

Voici ma solution pour les commentaires en ligne entre plusieurs commandes canalisées.

Exemple de code non commenté:

    #!/bin/sh
    cat input.txt \
    | grep something \
    | sort -r

Solution pour un commentaire de pipe (utilisant une fonction d'assistance):

    #!/bin/sh
    pipe_comment() {
        cat - 
    }
    cat input.txt \
    | pipe_comment "filter down to lines that contain the Word: something" \
    | grep something \
    | pipe_comment "reverse sort what is left" \
    | sort -r

Ou si vous préférez, voici la même solution sans la fonction d'assistance, mais c'est un peu plus compliqué:

    #!/bin/sh
    cat input.txt \
    | cat - `: filter down to lines that contain the Word: something` \
    | grep something \
    | cat - `: reverse sort what is left` \
    | sort -r
2
KylePDavis

La plupart des commandes permettent aux arguments de venir dans n'importe quel ordre. Il suffit de déplacer les drapeaux commentés à la fin de la ligne:

ls -l -a /etc # -F is turned off

Ensuite, pour le réactiver, décommentez et supprimez le texte:

ls -l -a /etc -F
2
leedm777

Si vous savez qu'une variable est vide, vous pouvez l'utiliser comme commentaire. Bien sûr, si ce n'est pas vide, cela gâchera votre commande.

 ls -l $ {1 # -F est désactivé} -a /etc

§ 10.2. Paramètre Substitution

1
Steven Penny

Si le commentaire vaut la peine d'être dit, il peut probablement aller au bout de la ligne, ou sur une ligne seul. Je trouve rarement un besoin de commentaires internes avec du code avant et après le commentaire, dans aucune langue.

Oh, il y a une exception, le dialecte de SQL que j'utilise habituellement et qui utilise '{comments}'. De temps en temps j'écrirai:

CREATE UNIQUE INDEX u1_table ON Table(...);
CREATE {DUPS} INDEX d1_table ON Table(...);

Mais même cela ne va pas.

0
Jonathan Leffler

Pour désactiver une partie d'une commande telle que a && b, j'ai simplement créé un script vide x qui se trouve sur le chemin d'accès, afin de pouvoir effectuer les opérations suivantes:

mvn install && runProject

quand j'ai besoin de construire, et

x mvn install && runProject

quand pas (en utilisant Ctrl + A et Ctrl + E aller au début et à la fin).

Comme indiqué dans les commentaires, une autre façon de le faire est d'utiliser Bash : au lieu de x:

$  : Hello world, how are you? && echo "Fine."
Fine.
0
Ondra Žižka