Sieben unerwartete Bash-Variablen

Fortsetzung der Reihe von Anmerkungen zu weniger bekannt Funktionen bash, ich zeige Ihnen sieben Variablen, die Sie vielleicht noch nicht kennen.

1) PROMPT_COMMAND

Möglicherweise wissen Sie bereits, wie Sie die Eingabeaufforderung manipulieren, um verschiedene nützliche Informationen anzuzeigen, aber nicht jeder weiß, dass Sie jedes Mal, wenn die Eingabeaufforderung angezeigt wird, einen Shell-Befehl ausführen können.

Tatsächlich verwenden viele komplexe Eingabeaufforderungsmanipulatoren diese Variable, um Befehle auszuführen und Informationen zu sammeln, die in der Eingabeaufforderung angezeigt werden.

Versuchen Sie, dies in einer neuen Shell auszuführen und sehen Sie, was mit der Sitzung passiert:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Wenn du läufst history In der Konsole erhalten Sie eine Liste der Befehle, die zuvor unter Ihrem Konto ausgeführt wurden.

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

Sobald diese Variable festgelegt ist, zeichnen neue Einträge die Zeit zusammen mit dem Befehl auf, sodass die Ausgabe wie folgt aussieht:

1871 Ich habe dies ausgeführt am: 01 05:19:13 cat /etc/resolv.conf 38 Ich habe dies ausgeführt am: 07 1872:01:05 curl bbc.co.uk 19 Ich habe dies ausgeführt am : 13/38/19 1873:01:05 sudo vi /etc/resolv.conf 19 Ich habe dies ausgeführt am: 13/38/41 1874:01:05 curl -vvv bbc.co.uk 19 Ich habe dies ausgeführt am: 13 /39/18 1876:01:05 sudo su -

Die Formatierung entspricht den Zeichen von man date.

3) CDPATH

Um Zeit in der Befehlszeile zu sparen, können Sie diese Variable verwenden, um Verzeichnisse so einfach zu ändern, wie Sie Befehle erteilen.

als PATH, variabel CDPATH ist eine durch Doppelpunkte getrennte Liste von Pfaden. Wenn Sie den Befehl ausführen cd Mit einem relativen Pfad (d. h. ohne führenden Schrägstrich) sucht die Shell standardmäßig in Ihrem lokalen Ordner nach übereinstimmenden Namen. CDPATH sucht in den von Ihnen angegebenen Pfaden nach dem Verzeichnis, in das Sie wechseln möchten.

Wenn Sie installieren CDPATH auf diese Weise:

$ CDPATH=/:/lib

und geben Sie dann ein:

$ cd /home
$ cd tmp

dann landest du immer darin /tmp egal, wo du bist.

Seien Sie jedoch vorsichtig, denn wenn Sie den lokalen nicht in der Liste angeben (.)-Ordner, dann können Sie keinen anderen Ordner erstellen tmp und gehen Sie wie gewohnt dorthin:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Hoppla!

Dies ähnelt der Verwirrung, die ich verspürte, als mir klar wurde, dass der lokale Ordner nicht in der bekannteren Variable enthalten war PATH... aber Sie müssen es in Ihrer PATH-Variablen tun, da Sie möglicherweise dazu verleitet werden, einen gefälschten Befehl aus heruntergeladenem Code auszuführen.

Meins wird durch den Startpunkt festgelegt:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

Haben Sie sich jemals gefragt, ob Sie tippen möchten? exit Werden Sie von Ihrer aktuellen Bash-Shell zu einer anderen „übergeordneten“ Shell weitergeleitet oder wird das Konsolenfenster einfach vollständig geschlossen?

Diese Variable verfolgt, wie tief Sie in der Bash-Shell verschachtelt sind. Wenn Sie ein neues Terminal erstellen, wird es auf 1 gesetzt:

$ echo $SHLVL
1

Wenn Sie dann einen weiteren Shell-Prozess starten, erhöht sich die Zahl:

$ bash
$ echo $SHLVL
2

Dies kann in Skripten sehr nützlich sein, bei denen Sie nicht sicher sind, ob Sie beenden sollen oder nicht, oder bei denen Sie nicht wissen, wo Sie sich befinden.

5) LINENO

Die Variable eignet sich auch zur Analyse des aktuellen Zustands und zum Debuggen LINENO, das die Anzahl der bisher in der Sitzung ausgeführten Befehle meldet:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Dies wird am häufigsten beim Debuggen von Skripten verwendet. Einfügen von Zeilen wie echo DEBUG:$LINENOkönnen Sie schnell feststellen, wo im Skript Sie sich befinden (oder nicht).

6) REPLY

Wenn Sie wie ich normalerweise Code wie diesen schreiben:

$ read input
echo do something with $input

Es mag überraschen, dass Sie sich um die Erstellung der Variablen überhaupt keine Gedanken machen müssen:

$ read
echo do something with $REPLY

Dies bewirkt das Gleiche.

7) TMOUT

Um zu vermeiden, dass Sie aus Sicherheitsgründen zu lange auf Produktionsservern bleiben oder versehentlich etwas Gefährliches im falschen Terminal ausführen, dient das Setzen dieser Variable als Schutz.

Wenn für eine bestimmte Anzahl von Sekunden keine Eingabe erfolgt, wird die Shell beendet.

Das heißt, dies ist eine Alternative sleep 1 && exit:

$ TMOUT=1

Source: habr.com

Kommentar hinzufügen