Sieben unerwartete Bash-Variablen

Wenn Sie mit einer Reihe von Hinweisen zu weniger bekannten Bash- Funktionen fortfahren, zeige ich Ihnen sieben Variablen, die Sie möglicherweise nicht kennen.

1) PROMPT_COMMAND


Möglicherweise wissen Sie bereits, wie Sie die Eingabeaufforderung bearbeiten, um verschiedene nützliche Informationen anzuzeigen, aber nicht jeder weiß, dass Sie bei jeder Anzeige der Eingabeaufforderung einen Shell-Befehl ausführen können.

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

Wenn Sie dies in einer neuen Shell ausführen, werden Sie sehen, was mit der Sitzung passiert:

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

2) HISTTIMEFORMAT


Wenn Sie den history in der Konsole ausführen, 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 gesetzt ist, zeichnen neue Datensätze die Zeit zusammen mit dem Befehl auf, sodass die Ausgabe folgendermaßen aussieht:

 1871 I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 I ran this at: 01/05/19 13:38:19 curl bbc.co.uk 1873 I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 I ran this at: 01/05/19 13:39:25 sudo su - 

Die Formatierung entspricht den Zeichen ab dem Datum des Mannes.

3) CDPATH


Um Zeit in der Befehlszeile zu sparen, können Sie mit dieser Variablen Verzeichnisse so einfach ändern, wie Sie Befehle aufrufen.

Wie PATH ist die CDPATH Variable eine durch Doppelpunkte getrennte Liste von Pfaden. Wenn Sie den cd mit einem relativen Pfad ausführen ( cd ohne Schrägstrich am Anfang), sucht die Shell standardmäßig nach den entsprechenden Namen in Ihrem lokalen Ordner. CDPATH sucht in den von Ihnen angegebenen Pfaden nach dem Verzeichnis, in das Sie gehen möchten.

Wenn Sie CDPATH installieren:

 $ CDPATH=/:/lib 

und geben Sie dann ein:

 $ cd /home $ cd tmp 

dann bist du immer in /tmp egal wo du bist.

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

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

Ups!

Dies ähnelt der Verwirrung, die ich empfand, als ich feststellte, dass der lokale Ordner nicht in der bekannteren PATH Variablen enthalten war ... aber Sie müssen dies in der PATH-Variablen tun, da Sie durch Ausführen eines gefälschten Befehls aus einem heruntergeladenen Code ausgetrickst werden können.

Mein wird durch den Startpunkt festgelegt:

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

4) SHLVL


Haben Sie sich jemals gefragt, ob Sie durch Eingabe von exit aus der aktuellen Bash-Shell zu einer anderen übergeordneten Shell gelangen oder das Konsolenfenster einfach vollständig schließen?

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

 $ echo $SHLVL 1 

Wenn Sie dann einen anderen Shell-Prozess starten, erhöht sich die Anzahl:

 $ bash $ echo $SHLVL 2 

Dies kann in Skripten sehr nützlich sein, in denen Sie nicht sicher sind, ob Sie das Programm beenden oder nicht, oder ob Sie durch Verschachteln verfolgen möchten, wo Sie sich befinden.

5) LINENO


LINENO den aktuellen Status und das Debugging zu analysieren, ist die Variable LINENO , die die Anzahl der Befehle LINENO , die bisher in der Sitzung ausgeführt wurden:

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

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

6) REPLY


Wenn Sie wie ich normalerweise Code wie diesen schreiben:

 $ read input echo do something with $input 

Es kann überraschen, dass Sie sich überhaupt keine Gedanken über das Erstellen einer Variablen machen müssen:

 $ read echo do something with $REPLY 

Es macht das gleiche.

7) TMOUT


Um aus Sicherheitsgründen nicht zu lange auf Produktionsservern zu bleiben oder versehentlich etwas Gefährliches im falschen Terminal auszuführen, dient das Festlegen dieser Variablen als Schutz.

Wenn innerhalb der festgelegten Anzahl von Sekunden nichts eingegeben wird, wird die Shell beendet.

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

 $ TMOUT=1 

Source: https://habr.com/ru/post/de451492/


All Articles