Acht weniger bekannte Bash-Optionen

Einige Bash-Optionen sind gut bekannt und werden häufig verwendet. Zum Beispiel schreiben viele am Anfang eines Skripts

set -o xtrace

zum Debuggen,

set -o errexit

zum Beenden bei Fehlern oder

set -o errunset

zum Beenden, wenn eine aufgerufene Variable nicht gesetzt ist.

Es gibt jedoch viele andere Optionen. Manchmal sind diese in den Manpages zu verwirrend beschrieben, daher habe ich hier einige der nützlichsten zusammengetragen, mit Erklärungen.

Hinweis: Auf Mac könnte eine ältere Version von Bash (3.x statt 4.x) installiert sein, bei der nicht alle diese Optionen verfügbar sind. In diesem Fall schauen Sie sich hier oder hier.

set oder shopt?

an. Es gibt zwei Möglichkeiten, Bash-Parameter festzulegen: aus einem Skript oder von der Kommandozeile. Man kann die eingebauten Befehle verwenden set und shopt. Beide verändern das Verhalten der Shell und bewirken im Wesentlichen das Gleiche (mit unterschiedlichen Argumenten) und unterscheiden sich in ihrem Herkunft.Die Parameter set werden von anderen Shells geerbt oder entliehen, während die Parameter shopt in Bash erstellt werden.

Wenn Sie sich die aktuellen Optionen ansehen möchten, führen Sie Folgendes aus:

$ set -o
$ shopt

Um eine Option in set zu aktivieren, verwenden Sie die lange oder kurze Syntax:

$ set -o errunset
$ set -e

Die Wirkung ist die gleiche.

Um eine Option zu deaktivieren, setzen Sie ein Pluszeichen anstelle eines Minuszeichens:

$ set +e

Lange Zeit konnte ich diese Syntax nicht verstehen, da die Logik mir falsch erschien (Minus bedeutet aktivieren, Plus deaktivieren).

In shopt Für das Ein- und Ausschalten von Optionen werden (logischere) Flags verwendet. -s (set) und -u (unset):

$ shopt -s cdspell # <= an
$ shopt -u cdspell # <= aus

Verzeichnise wechseln

Es gibt mehrere Optionen, die bei der Arbeit mit Verzeichnissen helfen.

1. cdspell

Mit dieser Einstellung wird bash Tippfehler erkennen und Sie in das Verzeichnis bringen, dessen Name Sie falsch eingegeben haben.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

Ich habe diese Option viele Jahre genutzt, und sehr selten (vielleicht einmal im Jahr) trifft sie eine sehr seltsame Entscheidung. Aber an den anderen Tagen cdspell spart jeden Tag Zeit.

2. autocd

Wenn Sie die Ineffizienz der mehrfachen Eingabe nicht ertragen wollen, cdkönnen Sie diese Option aktivieren, um in das Verzeichnis X zu wechseln, falls der Befehl X nicht existiert.

$ shopt -s autocd
$ abcdefg
$ cd ..

In Kombination mit der Auto-Vervollständigung ermöglicht es, schnell durch Verzeichnisse zu springen:

$ ./abc[TAB][RETURN]
cd -- ./abcdefg

Nennen Sie das Verzeichnis nur nicht rm -rf * (ja, das ist übrigens möglich).

3. direxpand

Das ist eine coole Option, die Umgebungsvariablen mit der Tab-Taste erweitert:

$ shopt -s direxpand
$ ./[TAB]     # wird ersetzt durch...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # wird ersetzt durch...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  wird ersetzt durch...
$ /full/path/to/home/folder

Sauberer Ausgang

4. checkjobs

Dieser Parameter stoppt den Abgang aus der Sitzung, wenn im Hintergrund noch Aufgaben laufen.

Stattdessen wird eine Liste der laufenden Aufgaben angezeigt. Wenn Sie dennoch aussteigen möchten, geben Sie erneut ein exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= Prozess-ID für die Shell
$ sleep 999 &
$ exit
Es gibt laufende Aufgaben.
[1]+  Laufend                 sleep 999 &
$ echo $$
68125             # <= Prozess-ID für die Shell bleibt gleich
$ exit
Es gibt laufende Aufgaben.
[1]+  Laufend                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= diesmal hat sich die Prozess-ID geändert

Überlegenes Platzieren

5. globstar

Diese Option gibt Ihnen überlegene Platzierungsmöglichkeiten! Wenn Sie eingeben:

$ shopt -s globstar
$ ls **

wird die Shell rekursiv alle Verzeichnisse und Unterverzeichnisse anzeigen.

In Kombination mit direxpand können Sie schnell alles durchsuchen, was in der Hierarchie darunter liegt:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Alle 2033 Möglichkeiten anzeigen? (j oder n) 

6. extglob

Diese Option aktiviert Funktionen, die öfter mit regulären Ausdrücken assoziiert werden. Manchmal ist das sehr nützlich:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

Hier werden Vorlagen in runde Klammern gesetzt und durch senkrechte Striche getrennt. Folgende Operatoren sind verfügbar:

? = соответствует нулю или одному вхождению заданных шаблонов
! = показать всё, что не соответствует заданным шаблонам
* = ноль или более вхождений
+ = одно или более вхождений
@ = ровно одно вхождение

Schutz vor ungewollten Ereignissen

7. histverify

Es kann anfangs etwas einschüchternd wirken, die schnellen Startbefehle aus der Historie mit Abkürzungen zu verwenden. !! und !$.

Option histverify ermöglicht es Ihnen, zu sehen, wie Bash den Befehl interpretiert, bevor er tatsächlich ausgeführt wird:

$ shopt -s histverify
$ echo !$          # <= Bei Drücken von Enter wird der Befehl nicht ausgeführt
$ echo histverify  # <= Zuerst wird er auf dem Bildschirm angezeigt,
histverify         # <= und dann ausgeführt. 

8. Noclobber

Wiederum zum Schutz vor ungewollten Ereignissen, insbesondere zum Verhindern des Überschreibens einer bereits existierenden Datei mit dem Umleitungsoperator (>). Das kann katastrophale Folgen haben, wenn Sie kein Backup haben.

Option set -C verhindert ein solches Überschreiben. Falls notwendig, kann der Schutz mit dem Operator umgangen werden >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: kann existierende Datei nicht überschreiben
$ echo something >| afile
$

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