Sieben unerwartete Bash-Variablen

Fortfahrend mit der Reihe von Notizen über weniger bekannte Funktionen von bash, zeige ich Ihnen sieben Variablen, von denen Sie möglicherweise nicht wussten.

1) PROMPT_COMMAND

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

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

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

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

2) HISTTIMEFORMAT

Wenn Sie history In der Konsole 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 zusammen mit dem Befehl die Zeit aufzeichnen, 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 -

Das Format entspricht den Zeichen aus man date.

3) CDPATH

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

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

Wenn Sie es so setzen: CDPATH $ CDPATH=/:/lib

und dann eingeben:

$ cd /home $ cd tmp

werden Sie immer in

gelangen, egal wo Sie sich befinden. /tmp Seien Sie jedoch vorsichtig, denn wenn Sie das lokale (

) Verzeichnis nicht in der Liste angeben, können Sie kein anderes Verzeichnis erstellen.tmp und dorthin wechseln, wie gewohnt: $ cd /home $ mkdir tmp $ cd tmp $ pwd /tmp

Ups!

Das fühlt sich nach dem Verwirrspiel an, das ich empfand, als ich erkannte, dass das lokale Verzeichnis nicht in die vertrautere Variable

eingeschlossen war… aber Sie müssen dies in der PATH-Variable tun, weil Sie möglicherweise getäuscht werden, wenn Sie einen gefälschten Befehl aus heruntergeladenem Code ausführen. PATHMein Wert wird als Ausgangspunkt gesetzt:

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

SHLVL

4) Haben Sie sich jemals gefragt, ob Sie

eingeben exit Wird Sie von der aktuellen Bash-Shell in eine andere "übergeordnete" Shell verschieben oder einfach das Konsolenfenster vollständig schließen?

Diese Variable verfolgt, wie tief Sie in die Bash-Shell eingetaucht sind. Wenn Sie ein neues Terminal erstellen, ist sie auf 1 gesetzt:

$ echo $SHLVL
1

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

$ bash
$ echo $SHLVL
2

Das kann in Skripten sehr nützlich sein, wenn Sie sich nicht sicher sind, ob Sie aussteigen oder verfolgen wollen, wo Sie in der Verschachtelung sind.

5) LINENO

Für die Analyse des aktuellen Status und das Debugging ist die Variable LINENO, die die Anzahl der bisher in der Sitzung ausgeführten Befehle anzeigt:

$ 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 herausfinden, wo Sie sich im Skript befinden (oder nicht).

6) REPLY

Wenn Sie, wie ich, normalerweise solchen Code schreiben:

$ read input
echo mach etwas mit $input

kann es eine Überraschung sein, dass Sie sich überhaupt keine Gedanken über das Erstellen einer Variable machen müssen:

$ read
echo mach etwas mit $REPLY

Das macht dasselbe.

7) TMOUT

Um nicht zu lange auf Produktionsservern zu bleiben, aus Sicherheitsgründen, oder um nicht versehentlich etwas Gefährliches im falschen Terminal zu starten, funktioniert das Setzen dieser Variable als Schutz.

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

60GB SSD 8Gb DDR4