Fortsetzung der Reihe von Anmerkungen zu
1) PROMPT_COMMAND
Möglicherweise wissen Sie bereits, wie Sie die Eingabeaufforderung manipulieren, um verschiedene nützliche Informationen anzuzeigen, aber nicht jeder weiß, dass Sie jedes Mal, wenn die Eingabeaufforderung angezeigt wird, einen Shell-Befehl ausführen können.
Tatsächlich verwenden viele komplexe Eingabeaufforderungsmanipulatoren diese Variable, um Befehle auszuführen und Informationen zu sammeln, 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 du läufst history
In der Konsole 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 festgelegt ist, zeichnen neue Einträge die Zeit zusammen mit dem Befehl auf, sodass die Ausgabe wie folgt aussieht:
1871 Ich habe dies ausgeführt am: 01 05:19:13 cat /etc/resolv.conf 38 Ich habe dies ausgeführt am: 07 1872:01:05 curl bbc.co.uk 19 Ich habe dies ausgeführt am : 13/38/19 1873:01:05 sudo vi /etc/resolv.conf 19 Ich habe dies ausgeführt am: 13/38/41 1874:01:05 curl -vvv bbc.co.uk 19 Ich habe dies ausgeführt am: 13 /39/18 1876:01:05 sudo su -
Die Formatierung entspricht den Zeichen von man date
.
3) CDPATH
Um Zeit in der Befehlszeile zu sparen, können Sie diese Variable verwenden, um Verzeichnisse so einfach zu ändern, wie Sie Befehle erteilen.
als PATH
, variabel CDPATH
ist eine durch Doppelpunkte getrennte Liste von Pfaden. Wenn Sie den Befehl ausführen cd
Mit einem relativen Pfad (d. h. ohne führenden Schrägstrich) sucht die Shell standardmäßig in Ihrem lokalen Ordner nach übereinstimmenden Namen. CDPATH
sucht in den von Ihnen angegebenen Pfaden nach dem Verzeichnis, in das Sie wechseln möchten.
Wenn Sie installieren CDPATH
auf diese Weise:
$ CDPATH=/:/lib
und geben Sie dann ein:
$ cd /home
$ cd tmp
dann landest du immer darin /tmp
egal, wo du bist.
Seien Sie jedoch vorsichtig, denn wenn Sie den lokalen nicht in der Liste angeben (.
)-Ordner, dann können Sie keinen anderen Ordner erstellen tmp
und gehen Sie wie gewohnt dorthin:
$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp
Hoppla!
Dies ähnelt der Verwirrung, die ich verspürte, als mir klar wurde, dass der lokale Ordner nicht in der bekannteren Variable enthalten war PATH
... aber Sie müssen es in Ihrer PATH-Variablen tun, da Sie möglicherweise dazu verleitet werden, einen gefälschten Befehl aus heruntergeladenem Code auszuführen.
Meins wird durch den Startpunkt festgelegt:
CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt
4) SHLVL
Haben Sie sich jemals gefragt, ob Sie tippen möchten? exit
Werden Sie von Ihrer aktuellen Bash-Shell zu einer anderen „übergeordneten“ Shell weitergeleitet oder wird das Konsolenfenster einfach vollständig geschlossen?
Diese Variable verfolgt, wie tief Sie in der Bash-Shell verschachtelt sind. Wenn Sie ein neues Terminal erstellen, wird es 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, bei denen Sie nicht sicher sind, ob Sie beenden sollen oder nicht, oder bei denen Sie nicht wissen, wo Sie sich befinden.
5) LINENO
Die Variable eignet sich auch zur Analyse des aktuellen Zustands und zum Debuggen LINENO
, das die Anzahl der bisher in der Sitzung ausgeführten Befehle meldet:
$ bash
$ echo $LINENO
1
$ echo $LINENO
2
Dies wird am häufigsten beim Debuggen von Skripten verwendet. Einfügen von Zeilen wie echo DEBUG:$LINENO
können Sie schnell feststellen, wo im Skript Sie sich befinden (oder nicht).
6) REPLY
Wenn Sie wie ich normalerweise Code wie diesen schreiben:
$ read input
echo do something with $input
Es mag überraschen, dass Sie sich um die Erstellung der Variablen überhaupt keine Gedanken machen müssen:
$ read
echo do something with $REPLY
Dies bewirkt das Gleiche.
7) TMOUT
Um zu vermeiden, dass Sie aus Sicherheitsgründen zu lange auf Produktionsservern bleiben oder versehentlich etwas Gefährliches im falschen Terminal ausführen, dient das Setzen dieser Variable als Schutz.
Wenn für eine bestimmte Anzahl von Sekunden keine Eingabe erfolgt, wird die Shell beendet.
Das heißt, dies ist eine Alternative sleep 1 && exit
:
$ TMOUT=1
Source: habr.com