Niektóre opcje Bash są dobrze znane i często używane. Na przykład wiele osób pisze na początku scenariusza
ustaw -o xtrace
do debugowania,
set -o błąd
wyjść przez pomyłkę lub
set -o błąd
aby wyjść, jeśli wywoływana zmienna nie jest ustawiona.
Ale jest wiele innych opcji. Czasami są one opisane w manasie zbyt zawile, dlatego zebrałem tutaj niektóre z najbardziej przydatnych, wraz z wyjaśnieniem.
Uwaga: na komputerach Mac może być zainstalowana starsza wersja basha (3.x zamiast 4.x), na której nie wszystkie te opcje są dostępne. W tym przypadku zob
set
lub shopt
?
Istnieją dwa sposoby ustawiania opcji bash: ze skryptu lub z wiersza poleceń. Można używać wbudowanych poleceń set
и shopt
. Obydwa zmieniają zachowanie powłoki, robią prawie to samo (z różnymi argumentami), ale różnią się między sobą set
są dziedziczone lub zapożyczane z parametrów innych powłok, natomiast parametry shopt
utworzony w bashu.
Jeśli chcesz zobaczyć aktualne opcje, uruchom:
$ set -o
$ shopt
Aby aktywować opcję w set
Używana jest długa lub krótka składnia:
$ set -o errunset
$ set -e
Efekt jest taki sam.
Aby wyłączyć opcję, musisz umieścić plus zamiast minus:
$ set +e
Długo nie mogłem zapamiętać tej składni, bo logika wydawała mi się błędna (znak minus włącza opcję, a znak plus ją wyłącza).
В shopt
(bardziej logiczne) flagi służą do włączania i wyłączania opcji -s
(zestaw) i -u
(nieoprawny):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Zmiana katalogów
Istnieje kilka opcji ułatwiających pracę z katalogami.
1.cdspell
Przy tym ustawieniu bash zacznie rozumieć literówki i przeniesie Cię do folderu, którego nazwę błędnie wpisałeś.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Korzystam z tej opcji od wielu lat i bardzo rzadko (może raz na rok) podejmuje się bardzo dziwną decyzję. Ale w inne dni cdspell
oszczędza czas dosłownie każdego dnia.
2. autoCD
Jeśli nie chcesz zaakceptować nieefektywności wielokrotnych wpisów cd
, możesz ustawić tę opcję, aby przenieść do folderu X, jeśli polecenie X nie istnieje.
$ shopt -s autocd
$ abcdefg
$ cd ..
W połączeniu z autouzupełnianiem umożliwia to szybkie przeskakiwanie między folderami:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Po prostu nie nadawaj nazwy folderowi rm -rf *
(tak, nawiasem mówiąc, jest to możliwe).
3.kierunekrozwiń
To fajna opcja, która rozwija zmienne środowiskowe poprzez naciśnięcie klawisza Tab:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
czyste wyjście
4. zadania kontrolne
Ta opcja zatrzymuje wylogowywanie się z sesji, jeśli w tle nadal działają zadania.
Zamiast wyjść, wyświetlana jest lista niedokończonych zadań. Jeśli nadal chcesz wyjść, wejdź ponownie 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 процесса изменился
Supermocy zastępcze
5.globstar
Ta opcja daje Ci supermoce zastępcze! Jeśli wpiszesz:
$ shopt -s globstar
$ ls **
wtedy powłoka wyświetli rekurencyjnie wszystkie katalogi i podkatalogi.
W połączeniu z direxpand
Możesz szybko wyświetlić wszystko niżej w hierarchii:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Ta opcja włącza funkcje częściej kojarzone 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 wzory są umieszczone w nawiasach i oddzielone pionową kreską. Oto dostępni operatorzy:
? = dopasowuje zero lub jedno wystąpienie podanych wzorców! = pokaż wszystko, co nie pasuje do podanych wzorców * = zero lub więcej wystąpień + = jedno lub więcej wystąpień @ = dokładnie jedno wystąpienie
Ochrona przed wypadkami
7. histweryfikuj
Na początku użycie poleceń szybkiego uruchamiania z historii skrótów może być trochę przerażające !!
и !$
.
Opcja histverify
pozwala najpierw zobaczyć, jak Bash interpretuje polecenie, zanim faktycznie zostanie ono uruchomione:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Nocny wieczór
Ponownie, aby zabezpieczyć się przed wypadkami, a mianowicie przed nadpisaniem pliku, który już istnieje za pomocą operatora przekierowania (>
). Może to być katastrofa, jeśli nie masz kopii zapasowej.
Opcja set -С
zabrania takiego nadpisywania. W razie potrzeby można ominąć zabezpieczenie za pomocą operatora >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Źródło: www.habr.com