Einige Bash-Optionen sind bekannt und werden häufig verwendet. Zum Beispiel schreiben viele am Anfang eines Skripts
setze -o xtrace
zum Debuggen,
setze -o errexit
versehentlich verlassen oder
setze -o errunset
zu beenden, wenn die aufgerufene Variable nicht gesetzt ist.
Es gibt aber noch viele andere Möglichkeiten. Manchmal sind sie zu verwirrt, wie in mans beschrieben, deshalb habe ich hier einige der nützlichsten mit einer Erklärung zusammengestellt.
Hinweis: Der Mac verfügt möglicherweise über eine ältere Version von Bash (3.x, nicht 4.x), bei der nicht alle diese Optionen verfügbar sind. In diesem Fall schauen Sie hier oder hier .set
oder shopt
?
Es gibt zwei Möglichkeiten, Bash-Parameter festzulegen: über ein Skript oder über die Befehlszeile. Sie können die
shopt
set
und
shopt
. Beide ändern das Verhalten der Shell, machen fast dasselbe (mit unterschiedlichen Argumenten) und unterscheiden sich in ihrer
Herkunft .
shopt
Parameter
shopt
von Parametern anderer Shells geerbt oder ausgeliehen, während
shopt
Parameter in Bash erstellt werden.
Wenn Sie sich die aktuellen Optionen ansehen möchten, führen Sie Folgendes aus:
$ set -o $ shopt
Um eine Option im
set
zu aktivieren, wird eine lange oder kurze Syntax verwendet:
$ set -o errunset $ set -e
Der Effekt ist der gleiche.
Um die Option zu deaktivieren, müssen Sie ein Plus anstelle eines Minus setzen:
$ set +e
Lange konnte ich mich nicht an diese Syntax erinnern, da die Logik falsch zu sein scheint (Minus schaltet die Option ein und Plus schaltet sie aus).
shopt
verwendet die
shopt
(logischer)
-s
(set) und
-u
(unset), um Optionen zu aktivieren und zu deaktivieren:
$ shopt -s cdspell
Verzeichnisänderungen
Es gibt verschiedene Optionen, mit denen Sie mit Verzeichnissen arbeiten können.
1. cdspell
Mit dieser Einstellung beginnt bash, Tippfehler zu verstehen und leitet Sie in einen Ordner weiter, dessen Namen Sie mit einem Fehler eingegeben haben.
$ shopt -s cdspell $ mkdir abcdefg $ cd abcdeg abcdefg $ cd ..
Ich habe diese Option viele Jahre lang verwendet und sehr selten (vielleicht einmal im Jahr) trifft sie eine sehr seltsame Entscheidung. Aber an den anderen Tagen spart
cdspell
buchstäblich jeden Tag Zeit.
2. autocd
Wenn Sie nicht bereit sind, die Ineffizienz wiederholter
cd
Eingaben in
cd
, können Sie diese Option so einstellen, dass sie in den X-Ordner verschoben wird, wenn der X-Befehl nicht vorhanden ist.
$ shopt -s autocd $ abcdefg $ cd ..
In Kombination mit der automatischen Vervollständigung können Sie so schnell zu Ordnern springen:
$ ./abc[TAB][RETURN] cd -- ./abcdefg
Nennen Sie
rm -rf *
Ordner einfach nicht
rm -rf *
(ja, das ist übrigens möglich).
3. direxpand
Dies ist eine coole Option, die Umgebungsvariablen durch Drücken der Tabulatortaste erweitert:
$ shopt -s direxpand $ ./[TAB]
Ausgang reinigen
4. Checkjobs
Diese Option stoppt das Beenden der Sitzung, wenn noch Jobs im Hintergrund ausgeführt werden.
Anstatt zu beenden, wird eine Liste unvollständiger Aufgaben angezeigt. Wenn Sie trotzdem beenden möchten, geben Sie
exit
erneut ein.
$ shopt -s checkjobs $ echo $$ 68125
Substitutionsfähigkeiten
5. Globstar
Diese Option bietet Ihnen übernatürliche Substitutionsfähigkeiten! Wenn Sie eingeben:
$ shopt -s globstar $ ls **
dann zeigt die Shell rekursiv alle Verzeichnisse und Unterverzeichnisse an.
In Kombination mit
direxpand
Sie schnell alles unten in der Hierarchie sehen:
$ shopt -s direxpand $ ls **[TAB][TAB] Display all 2033 possibilities? (y or n)
6.extglob
Diese Option aktiviert Funktionen, die häufiger mit regulären Ausdrücken verknüpft sind. Dies ist manchmal 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 die Muster in Klammern gesetzt und durch einen vertikalen Balken getrennt. Hier sind die verfügbaren Operatoren:
? = entspricht null oder einem Vorkommen der angegebenen Muster
! = zeige alles, was nicht zu den angegebenen Mustern passt
* = null oder mehr Vorkommen
+ = ein oder mehrere Vorkommen
@ = genau ein Vorkommen
Unfallschutz
7. histverifizieren
Zunächst kann es etwas beängstigend sein, Schnellstartbefehle aus der Geschichte der Abkürzungen zu verwenden
!!
und
!$
.
Mit der Option
histverify
können
histverify
zunächst sehen, wie Bash den Befehl interpretiert, bevor er tatsächlich
histverify
:
$ shopt -s histverify $ echo !$
8. Noclobber
Auch hier zum Schutz vor Unfällen, nämlich vor dem Überschreiben einer Datei, die bereits beim Weiterleitungsoperator vorhanden ist (
>
). Dies kann eine Katastrophe sein, wenn Sie kein Backup haben.
Die Option
set -
verhindert ein solches Überschreiben. Bei Bedarf können Sie den Schutz mit dem Operator
>|
umgehen ::
$ touch afile $ set -C $ echo something > afile -bash: afile: cannot overwrite existing file $ echo something >| afile $