it-swarm.com.de

Inline-Kommentare für Bash?

Ich möchte gerne ein einzelnes Flag in einem einzeiligen Befehl auskommentieren. Bash scheint nur from # till end-of-line Kommentare zu haben. Ich betrachte Tricks wie:

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

Es ist hässlich, aber besser als nichts. Gibt es einen besseren Weg?

Folgendes scheint zu funktionieren, aber ich bin nicht sicher, ob es tragbar ist:

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

Mein bevorzugtes ist:

Kommentieren in einem Bash-Skript

Dies hat etwas Mehraufwand, aber technisch beantwortet es Ihre Frage

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

Und speziell für Pipelines gibt es eine sauberere Lösung ohne Overhead

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

So fügen Sie einen Zeilenkommentar für einen mehrzeiligen Befehl ein

76
Rafareino

Ich finde es am einfachsten (und am besten lesbar), einfach die Zeile zu kopieren und die Originalversion auszukommentieren:

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

$(: ...) ist etwas weniger hässlich, aber immer noch nicht gut.

Wie wäre es, es in einer Variablen zu speichern?

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

Hier ist meine Lösung für Inline-Kommentare zwischen mehreren übergebenen Befehlen.

Beispiel für unkommentierten Code:

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

Lösung für einen Pipe-Kommentar (unter Verwendung einer Hilfsfunktion):

    #!/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

Oder wenn Sie es vorziehen, hier ist die gleiche Lösung ohne die Helferfunktion, aber es ist etwas unordentlich:

    #!/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

Bei den meisten Befehlen kann args in beliebiger Reihenfolge vorkommen. Verschieben Sie einfach die kommentierten Flags an das Ende der Zeile:

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

Um es wieder einzuschalten, entfernen Sie einfach den Kommentar und entfernen Sie den Text:

ls -l -a /etc -F
2
leedm777

Wenn Sie wissen, dass eine Variable leer ist, können Sie sie als Kommentar verwenden. Wenn es nicht leer ist, wird es natürlich Ihren Befehl durcheinander bringen.

 ls -l $ {1 # -F ist deaktiviert} -a /etc

§ 10.2. Parametersubstitution

1
Steven Penny

Wenn es sich lohnt, einen Kommentar abzugeben, kann er wahrscheinlich am Ende der Zeile oder in einer eigenen Zeile stehen. Ich finde selten, dass Inline-Kommentare mit Code vor und nach dem Kommentar in einer beliebigen Sprache benötigt werden.

Oh, es gibt eine Ausnahme, nämlich den Dialekt von SQL, den ich normalerweise verwende, der '{comments}' verwendet. Gelegentlich schreibe ich:

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

Aber auch das ist eine Strecke.

0

Um einen Teil eines Befehls wie a && b zu deaktivieren, habe ich einfach ein leeres Skript x erstellt, das sich im Pfad befindet, damit ich folgende Aufgaben ausführen kann:

mvn install && runProject

wenn ich bauen muss, und

x mvn install && runProject

wenn nicht (mit Ctrl + A und Ctrl + E an den Anfang und an das Ende gehen).

Wie in den Kommentaren erwähnt, ist eine andere Möglichkeit, dies zu tun, der in Bash integrierte : anstelle von x:

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