Osiem mało znanych opcji Bash

Niektóre opcje Bash są dobrze znane i często używane. Na przykład wiele osób na początku skryptu pisze

set -o xtrace

w celu debugowania,

set -o errexit

aby zakończyć na błąd lub

set -o errunset

aby zakończyć, jeśli wywołana zmienna nie jest ustawiona.

Jednak istnieje wiele innych opcji. Czasami są one zbyt chaotycznie opisane w dokumentacji, dlatego zebrałem tutaj niektóre z najprzydatniejszych, z wyjaśnieniem.

Uwaga: na Macu może być zainstalowana starsza wersja bash (3.x, a nie 4.x), w której nie wszystkie te opcje są dostępne. W takim przypadku zapoznaj się z tutaj lub tutaj.

set lub shopt?

Istnieją dwa sposoby ustawiania parametrów bash: z użyciem skryptu lub z linii poleceń. Można używać wbudowanych poleceń set i shopt. Obie zmieniają zachowanie powłoki, spełniając w dużym stopniu tę samą funkcję (z różnymi argumentami), różnią się swoim pochodzeniem. Parametry set są dziedziczone lub pożyczane z parametrów innych powłok, podczas gdy parametry shopt są tworzone w bash.

Jeśli chcesz zobaczyć aktualne opcje, uruchom:

$ set -o
$ shopt

Aby aktywować opcję w set używa się długiej lub krótkiej składni:

$ set -o errunset
$ set -e

Efekt jest taki sam.

Aby dezaktywować opcję, należy postawić plus zamiast minusa:

$ set +e

Przez długi czas nie mogłem zapamiętać tej składni, ponieważ logika wydaje się niewłaściwa (minus włącza opcję, a plus — wyłącza).

W shopt do włączania i wyłączania opcji używa się (bardziej logicznych) znaczników -s (set) i -u (unset):

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

Zmiana katalogów

Istnieje kilka opcji, które pomagają w pracy z katalogami.

1. cdspell

Z tą ustawieniem bash zacznie rozumieć literówki i przeniesie cię do folderu, którego nazwę wpisałeś błędnie.

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

Używałem tej opcji przez wiele lat, a bardzo rzadko (może raz w roku) podejmuje bardzo dziwne decyzje. Ale przez resztę dni cdspell oszczędza czas, dosłownie każdego dnia.

2. autocd

Jeśli nie jesteś gotów znieść nieefektywności wielokrotnego wpisywania cd, to możesz ustawić tę opcję, aby przejść do folderu X, jeśli komenda X nie istnieje.

$ shopt -s autocd
$ abcdefg
$ cd ..

W połączeniu z automatycznym uzupełnianiem pozwala szybko przeskakiwać po folderach:

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

Tylko nie nazywaj folderu rm -rf * (tak, to zresztą możliwe).

3. direxpand

To fajna opcja, która rozwija zmienne środowiskowe po naciśnięciu Tab:

$ shopt -s direxpand
$ .\/[TAB]     # zamieniane na...
$ \/pełna\/ścieżka\/do\/aktualnego_katalogu_pracy
$ ~\/[TAB]     # zamieniane na...
$ \/pełna\/ścieżka\/do\/folderu\/domowego
$ $HOME\/[TAB] #  zamieniane na...
$ \/pełna\/ścieżka\/do\/folderu\/domowego

Czyste wyjście

4. checkjobs

Ten parametr zatrzymuje wyjście z sesji, jeśli w tle nadal działają zadania.

Zamiast wyjścia wyświetlana jest lista niezakończonych zadań. Jeśli chcesz mimo to wyjść, wprowadź ponownie exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= ID procesu dla powłoki
$ sleep 999 &
$ exit
Są uruchomione zadania.
[1]+  Uruchomione                 sleep 999 &
$ echo $$
68125             # <= ID procesu dla powłoki ten sam
$ exit
Są uruchomione zadania.
[1]+  Uruchomione                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= tym razem ID procesu zmieniło się

Nadprzyrodzone umiejętności podpowiadania

5. globstar

Ta opcja daje ci nadprzyrodzone umiejętności podpowiadania! Jeśli wpiszesz:

$ shopt -s globstar
$ ls **

wtedy powłoka wyświetli rekurencyjnie wszystkie katalogi i podkatalogi.

W połączeniu z direxpand można szybko przeszukiwać wszystko, co znajduje się w hierarchii:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Wyświetlić wszystkie 2033 możliwości? (y lub n) 

6. extglob

Ta opcja aktywuje funkcje, które częściej kojarzone są z wyrażeniami regularnymi. Czasami jest to bardzo przydatne:

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

Tutaj wzorce umieszczane są w okrągłych nawiasach i oddzielane pionową kreską. Oto dostępne operatory:

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

Ochrona przed nieszczęściami

7. histverify

Na początku może być trochę straszno używać szybkiego uruchamiania poleceń z historii za pomocą skrótów !! i !$.

Opcja histverify pozwala najpierw zobaczyć, jak Bash interpretuje polecenie, zanim ono rzeczywiście się uruchomi:

$ shopt -s histverify
$ echo !$          # <= Po wciśnięciu Enter polecenie nie jest uruchamiane
$ echo histverify  # <= Najpierw jest wyświetlane na ekranie,
histverify         # <= a potem jest uruchamiane 

8. Noclobber

Ponownie, dla ochrony przed nieszczęściami, a mianowicie przed nadpisywaniem pliku, który już istnieje za pomocą operatora przekierowania (>). To może skończyć się katastrofą, jeśli nie masz kopii zapasowej.

Opcja set -C zapobiega takiemu nadpisywaniu. W razie potrzeby można obejść ochronę za pomocą operatora >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: nie można nadpisać istniejącego pliku
$ echo something >| afile
$

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster