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 lub .
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 . 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 -eEfekt jest taki sam.
Aby dezaktywować opcję, należy postawić plus zamiast minusa:
$ set +ePrzez 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 # <= offZmiana 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\/domowegoCzyste 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*)
cfileTutaj 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
