Sieben unerwartete Bash-Variablen

In der Fortsetzung unserer Reihe über weniger bekannte Funktionen von bash möchte ich Ihnen sieben Variablen vorstellen, die Ihnen vielleicht unbekannt sind.

1) PROMPT_COMMAND

Vielleicht wissen Sie bereits, wie man die Eingabeaufforderung anpasst, um verschiedene nützliche Informationen anzuzeigen, aber nicht jeder ist sich bewusst, dass bei jeder Anzeige der Eingabeaufforderung ein Shell-Befehl ausgeführt werden kann.

In der Tat verwenden viele komplexe Prompt-Manipulatoren diese Variable, um Befehle zur Informationssammlung auszuführen, 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 man ausführt history Wenn Sie dies in der Konsole eingeben, erhalten Sie eine Liste von Befehlen, die zuvor unter Ihrem Konto ausgeführt wurden.

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

Sobald diese Variable gesetzt ist, werden neue Einträge mit der Zeit zusammen mit dem Befehl protokolliert, sodass die Ausgabe so 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 Symbolen aus man date.

3) CDPATH

Um Zeit in der Kommandozeile zu sparen, können Sie diese Variable verwenden, um Verzeichnisse ebenso einfach zu wechseln, wie Sie Befehle aufrufen.

Wie auch PATH, die Variable CDPATH stellt eine durch Kollon getrennte Liste von Pfaden dar. Wenn Sie einen Befehl ausführen cd mit einem relativen Pfad (d.h. ohne führenden Slash), sucht die Shell standardmäßig in Ihrem lokalen Ordner nach den entsprechenden Namen. CDPATH wird in den Pfaden suchen, die Sie für das Verzeichnis angegeben haben, zu dem Sie wechseln möchten.

Wenn Sie es so einstellen CDPATH :

$ CDPATH=/:/lib

und dann eingeben:

$ cd /home
$ cd tmp

werden Sie immer dorthin gelangen /tmp egal, wo Sie sich befinden.

Seien Sie jedoch vorsichtig, denn wenn Sie das lokale (.) Verzeichnis nicht in die Liste aufnehmen, können Sie kein anderes Verzeichnis erstellen tmp und dorthin wechseln wie gewohnt:

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

Ups!

Das scheint die Verwirrung zu sein, die ich fühlte, als ich erkannte, dass das lokale Verzeichnis nicht in die vertrautere Variable aufgenommen wurde. PATH… aber Sie sollten dies in der PATH-Variable tun, da Sie möglicherweise durch das Ausführen eines gefälschten Befehls aus einem heruntergeladenen Code hereingelegt werden.

Mein Ausgangspunkt ist:

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

4) SHLVL

Haben Sie sich schon einmal gefragt, ob der Befehl exit Sie aus der aktuellen Bash-Shell in eine andere „Eltern“-Shell bringt oder einfach das Konsolenfenster vollständig schließt?

Diese Variable verfolgt, wie tief Sie in der Bash-Shell verschachtelt sind. Wenn Sie ein neues Terminal erstellen, wird sie 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, in denen Sie sich nicht sicher sind, ob Sie aussteigen sollen, oder um zu verfolgen, wo Sie in der Verschachtelung stehen.

5) LINENO

Die Variable LINENO, die die Anzahl der bis zu diesem Punkt in der Sitzung ausgeführten Befehle angibt, ist ebenfalls nützlich für die Analyse des aktuellen Zustands und das Debugging:

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

Das wird am häufigsten beim Debuggen von Skripten verwendet. Indem Sie solche Zeilen einfügen wie echo DEBUG:$LINENO, können Sie schnell feststellen, wo Sie im Skript sind (oder nicht).

6) REPLY

Wenn Sie, wie ich, normalerweise solchen Code schreiben:

$ read input
echo mach etwas mit $input

dann kann es eine Überraschung sein, dass Sie sich überhaupt keine Gedanken über die Erstellung einer Variablen machen müssen:

$ read
echo mach etwas mit $REPLY

Das macht das Gleiche.

7) TMOUT

Um nicht zu lange auf Produktionsservern zu bleiben, um die Sicherheit zu gewährleisten oder versehentlich etwas Gefährliches im falschen Terminal zu starten, fungiert die Einrichtung dieser Variablen als Schutzmaßnahme.

Wenn innerhalb einer festgelegten Anzahl von Sekunden nichts eingegeben wird, erfolgt ein Ausstieg aus der Shell.

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

$ TMOUT=1

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster