In der Fortsetzung unserer Reihe über 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=/:/libund 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
/tmpUps!
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:/opt4) 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
1Wenn Sie dann einen weiteren Shell-Prozess starten, erhöht sich die Zahl:
$ bash
$ echo $SHLVL
2Dies 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 $inputdann kann es eine Überraschung sein, dass Sie sich überhaupt keine Gedanken über die Erstellung einer Variablen machen müssen:
$ read
echo mach etwas mit $REPLYDas 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=1Quelle: habr.com
