Was bedeuten die Argumente '-v' und '-x', um zu schlagen?

17

Ich habe ein paar Shell-Skripte mit dem folgenden Shebang gesehen:

#!/bin/bash -x -v 

Jedoch man bashnicht erklären , was diese Argumente -xund -vstehen, wenn sie gehören sind bashüberhaupt nicht .

Was bedeuten diese -xund -v(und andere mögliche) Argumente?

Alex
quelle

Antworten:

26

Von man bash(ja, es ist eine große Manpage, normalerweise ist die Google-Suche schneller):

-x Zeigen Sie nach dem Erweitern jedes einfachen Befehls für Befehl, Groß- / Kleinschreibung, Auswahlbefehl oder Arithmetik für Befehl den erweiterten Wert von PS4 an, gefolgt von dem Befehl und seinen erweiterten Argumenten oder der zugehörigen Wortliste.

Effektiv: Wenn Sie ein Skript ausführen, werden alle in diesem Skript ausgeführten Aktionen angezeigt. Also laufen alle Wenns, Schleifen und Befehle. Sehr nützlich zum Debuggen.

-v Shell-Eingabezeilen beim Lesen drucken. Wenn ein Skript ausgeführt wird, wird das gesamte Skript beim Lesen der Datei gedruckt. Wenn Sie die Shell interaktiv verwenden, wird jeder Befehl nach dem Drücken der Eingabetaste angezeigt.

Die obigen Anführungszeichen stammen aus der Erklärung des seteingebauten Befehls in der man bash, was auch erklärt, dass die Optionen für setauch als Argumente übergeben werden können (in der Shebang-Zeile):

Sofern nicht anders angegeben, sind die Optionen standardmäßig deaktiviert. Mit + eher als -Ursachen diese Optionen deaktiviert werden. Die Optionen können auch als Argumente für einen Aufruf der Shell angegeben werden. Die aktuellen Optionen finden Sie in $-. Der Rückgabestatus ist immer wahr, sofern keine ungültige Option angetroffen wird.

mtak
quelle
Ok, es ist also ein einfaches Argument, und ich könnte eine andere Version ohne diese Argumente haben?
Alex
Wenn Sie über Bash sprechen: Ich denke, dass alle Bash-Releases des letzten Jahrzehnts diese Argumente unterstützen werden. Wenn Sie über die Manpage sprechen: Sie ist riesig und Sie müssen wissen, wonach Sie suchen, aber sie ist da (zumindest unter Ubuntu 13.04). Normalerweise ist eine Google-Suche schneller.
MTAK
6
+1 "Google-Suche ist schneller" -> /-xein paar Mal werden Sie dorthin gelangen man(eigentlich ist es less). Sie können die letzte Suche mit /+ Aufwärtspfeil wiederholen , aber Sie müssen nach unten blättern, um einen aktuellen Suchtreffer vom Bildschirm zu bekommen ( /ist Vorwärtssuche, ?ist Rückwärtssuche).
Goldlöckchen
2
@Tafka'goldilocks 'Ich schätze es hängt von deiner Distribution ab. In der Ubuntu 13.04 bash-Handbuchseite ist der 43. Treffer der richtige. Die Suche nach dem nächsten Treffer in weniger Zeit ist einfacher, wenn Sie die nVorwärtssuche und die NRückwärtssuche verwenden.
MTAK
Hoppla, eigentlich habe ich test -xunter CONDITIONAL EXPRESSIONS (der dritte Hit) gesucht , nicht set -x. -xIn man basheinem ziemlich schlechten Fall hilft es also, genauere Informationen zu erhalten: Wenn Sie verwenden /^\s+-x\b(= Zeilenanfang + Leerzeichen + -x+ Wortgrenze), gelangen Sie in 5 Treffern zum richtigen ... es wären 4 gewesen, aber die Tatsache xstimmt überein X... was mich zu einer Frage führt, die ich eigentlich stellen wollte . Wie auch immer, mit den meisten Manpages sollte das ^\s+-x\bMuster zuerst für Switches funktionieren.
Goldlöckchen
2

Die Bash-Manpage deutet zwar an, dass diese Optionen weiter unten erläutert werden, sie werden jedoch leicht übersehen.

Daher sollte Ihr Problem eigentlich lauten: Der Abschnitt OPTIONEN der Bash-Manpage ist unvollständig. Die Antwort wäre, sie entweder zu duplizieren oder den ersten Abschnitt des Abschnitts OPTIONEN zu markieren:

OPTIONS
   All  of  the  single-character shell options documented in the descrip‐
   tion of the set builtin command can be used as options when  the  shell
   is invoked.  [ ... ]

Zum Abschluss: Dies sind Standardoptionen für jede POSIX-Shell, mit denen der Code des Skripts beim Lesen ( -v) und beim Ausführen ( -x) angezeigt wird. Die Ausgabe erscheint auf stderr.

Henk Langeveld
quelle