Osiem mało znanych opcji Bash

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 tutaj lub tutaj.

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ą pochodzenie. Opcje 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

Dodaj komentarz