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 oder .
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 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 -eDie Wirkung ist die gleiche.
Um eine Option zu deaktivieren, setzen Sie ein Pluszeichen anstelle eines Minuszeichens:
$ set +eLange 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 # <= ausVerzeichnise 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/folderSauberer 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*)
cfileHier 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
