Acht wenig bekannte Bash-Optionen

Einige Bash-Optionen sind bekannt und werden häufig verwendet. Viele Leute schreiben zum Beispiel am Anfang des Drehbuchs

setze -o xtrace

zum Debuggen,

setze -o errexit

versehentlich verlassen oder

set -o errunset

zum Beenden, wenn die aufgerufene Variable nicht gesetzt ist.

Aber es gibt noch viele andere Möglichkeiten. Manchmal werden sie in Manas zu verwirrend beschrieben, daher habe ich hier einige der nützlichsten mit Erklärungen zusammengestellt.

Hinweis: Macs verfügen möglicherweise über eine ältere Version von Bash (3.x statt 4.x), bei der nicht alle dieser Optionen verfügbar sind. In diesem Fall siehe hier oder hier.

set oder shopt?

Es gibt zwei Möglichkeiten, Bash-Optionen festzulegen: über ein Skript oder über die Befehlszeile. Sie können integrierte Befehle verwenden set и shopt. Beide ändern das Verhalten der Shell, machen fast das Gleiche (mit unterschiedlichen Argumenten), unterscheiden sich jedoch in ihren Argumenten Herkunft. Optionen set werden von Parametern anderer Shells geerbt oder entlehnt, while-Parameter shopt erstellt in Bash.

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

$ set -o
$ shopt

Um die Option in zu aktivieren set Es 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 statt eines Minus eingeben:

$ set +e

Lange Zeit konnte ich mich nicht an diese Syntax erinnern, weil die Logik falsch schien (ein Minuszeichen aktiviert die Option und ein Pluszeichen deaktiviert sie).

В shopt (logischere) Flags werden zum Aktivieren und Deaktivieren von Optionen verwendet -s (gesetzt) ​​und -u (unscharf):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Verzeichnisse wechseln

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

1.cdspell

Mit dieser Einstellung erkennt Bash Tippfehler und leitet Sie zu dem Ordner weiter, dessen Namen Sie falsch geschrieben haben.

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

Ich nutze diese Option seit vielen Jahren und sehr selten (vielleicht einmal im Jahr) trifft sie eine sehr seltsame Entscheidung. Aber an anderen Tagen cdspell Spart Zeit, buchstäblich jeden Tag.

2. Autocd

Wenn Sie nicht bereit sind, die Ineffizienz mehrerer Einträge hinzunehmen cd, dann 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 zwischen Ordnern wechseln:

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

Benennen Sie den 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

saubere Ausgabe

4. Jobs prüfen

Diese Option stoppt die Abmeldung von der Sitzung, wenn noch Jobs im Hintergrund ausgeführt werden.

Anstatt den Vorgang zu beenden, wird eine Liste der nicht erledigten Aufgaben angezeigt. Wenn Sie dennoch aussteigen möchten, geben Sie es erneut ein exit.

$ 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 процесса  изменился

Substitutions-Supermächte

5.Globstar

Diese Option verleiht Ihnen Substitutions-Superkräfte! Wenn Sie Folgendes eingeben:

$ shopt -s globstar
$ ls **

dann zeigt die Shell alle Verzeichnisse und Unterverzeichnisse rekursiv an.

In Kombination mit direxpand Sie können schnell alles unten in der Hierarchie anzeigen:

$ 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. 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 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! = alles anzeigen, was nicht mit den angegebenen Mustern übereinstimmt * = null oder mehr Vorkommen + = ein oder mehrere Vorkommen @ = genau ein Vorkommen

Unfallschutz

7. histverify

Es kann anfangs etwas beängstigend sein, die Schnellstartbefehle aus der Abkürzungsgeschichte zu verwenden !! и !$.

Option histverify lässt Sie zunächst sehen, wie Bash den Befehl interpretiert, bevor er tatsächlich ausgeführt wird:

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Noclobber

Auch hier zum Schutz vor Unfällen, nämlich vor dem Überschreiben einer bereits vorhandenen Datei mit dem Redirect-Operator (>). Dies kann eine Katastrophe sein, wenn Sie kein Backup haben.

Option set -С verbietet 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: habr.com

Kommentar hinzufügen