Osam malo poznatih Bash opcija

Neke Bash opcije su dobro poznate i često se koriste. Na primjer, mnogi ljudi pišu na početku scenarija

set -o xtrace

za otklanjanje grešaka,

set -o errexit

greškom napustiti ili

set -o errunset

za izlaz ako pozvana varijabla nije postavljena.

Ali postoji mnogo drugih opcija. Ponekad su previše zbunjujuće opisani u manama, pa sam ovdje sakupio neke od najkorisnijih, uz objašnjenje.

Napomena: Macovi mogu imati stariju verziju bash-a (3.x umjesto 4.x) gdje nisu dostupne sve ove opcije. U ovom slučaju, vidi ovdje ili ovdje.

set ili shopt?

Postoje dva načina za postavljanje bash opcija: iz skripte ili iz komandne linije. Možete koristiti ugrađene komande set и shopt. Oba mijenjaju ponašanje ljuske, rade uglavnom istu stvar (sa različitim argumentima), ali se razlikuju po svom porijeklo... Opcije set su naslijeđeni ili posuđeni od parametara drugih ljuski, dok parametri shopt kreiran u bash-u.

Ako želite vidjeti trenutne opcije, pokrenite:

$ set -o
$ shopt

Da biste aktivirali opciju u set Duga ili kratka sintaksa se koristi:

$ set -o errunset
$ set -e

Efekat je isti.

Da biste onemogućili opciju, trebate staviti plus umjesto minusa:

$ set +e

Dugo se nisam mogao sjetiti ove sintakse jer je logika izgledala pogrešno (znak minus omogućava opciju, a znak plus je onemogućava).

В shopt (logičnije) zastavice se koriste za omogućavanje i onemogućavanje opcija -s (set) i -u (nepostavljeno):

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

Promjena direktorija

Postoji nekoliko opcija koje vam pomažu u radu s direktorijima.

1.cdspell

Sa ovom postavkom, bash će početi da razumije greške u kucanju i odvest će vas do fascikle čije ste ime pogrešno napisali.

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

Koristim ovu opciju već dugi niz godina i vrlo rijetko (možda jednom godišnje) donese vrlo čudnu odluku. Ali drugim danima cdspell štedi vrijeme, bukvalno svaki dan.

2. autocd

Ako niste voljni prihvatiti neefikasnost višestrukih unosa cd, tada možete podesiti ovu opciju da se premjesti u mapu X ako naredba X ne postoji.

$ shopt -s autocd
$ abcdefg
$ cd ..

U kombinaciji sa automatskim dovršavanjem, ovo vam omogućava brzo skakanje između foldera:

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

Samo nemojte imenovati folder rm -rf * (da, usput, ovo je moguće).

3.direxpand

Ovo je super opcija koja proširuje varijable okruženja pritiskom na Tab:

$ shopt -s direxpand
$ ./[TAB]     # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  заменяется на...
$ /full/path/to/home/folder

čist izlaz

4. provjere

Ova opcija zaustavlja odjavljivanje iz sesije ako još uvijek postoje poslovi koji se izvršavaju u pozadini.

Umjesto izlaska, prikazuje se lista nedovršenih zadataka. Ako i dalje želite izaći, uđite ponovo 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 процесса  изменился

Supstitucijske supermoći

5.globstar

Ova opcija vam daje zamjenske supermoći! Ako unesete:

$ shopt -s globstar
$ ls **

tada će ljuska rekurzivno prikazati sve direktorije i poddirektorije.

U kombinaciji sa direxpand Možete brzo pogledati sve niže u hijerarhiji:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

Ova opcija omogućava funkcije koje su češće povezane s regularnim izrazima. Ponekad je ovo veoma korisno:

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

Ovdje su uzorci stavljeni u zagrade i odvojeni okomitom trakom. Evo dostupnih operatera:

? = odgovara nuli ili jednom pojavljivanju datih obrazaca
! = prikaži sve što ne odgovara datim obrascima
* = nula ili više pojavljivanja
+ = jedno ili više pojavljivanja
@ = tačno jedno pojavljivanje

Zaštita od nezgoda

7. histverify

U početku može biti malo zastrašujuće koristiti komande za brzo pokretanje iz istorije skraćenica !! и !$.

Opcija histverify omogućava vam da prvo vidite kako Bash tumači naredbu prije nego što se ona zapravo pokrene:

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

8. Noclobber

Opet, radi zaštite od nezgoda, odnosno od prepisivanja datoteke koja već postoji sa operatorom za preusmjeravanje (>). Ovo može biti katastrofa ako nemate rezervnu kopiju.

Opcija set -С zabranjuje takvo prepisivanje. Ako je potrebno, možete zaobići zaštitu pomoću operatera >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

izvor: www.habr.com

Dodajte komentar