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
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 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