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