Acht wenig bekannte Bash-Optionen

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 # <= on $ shopt -u cdspell # <= off 

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] #  ... $ /full/path/to/current_working_folder $ ~/[TAB] #  ... $ /full/path/to/home/folder $ $HOME/[TAB] #  ... $ /full/path/to/home/folder 

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 # <= ID    $ sleep 999 & $ exit There are running jobs. [1]+ Running sleep 999 & $ echo $$ 68125 # <= ID      $ exit There are running jobs. [1]+ Running sleep 999 & $ exit $ echo $$ $ 59316 # <=    ID   

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 !$ # <=   Enter    $ echo histverify # <=     , histverify # <=    

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 $ 

Source: https://habr.com/ru/post/de452522/


All Articles