Neke Bash opcije su dobro poznate i često se koriste. Na primjer, mnogi ljudi pišu na početku skripte
skup -o xtrace
za otklanjanje pogrešaka,
postaviti -o errexit
greškom izaći ili
postaviti -o pogriješiti
za izlaz ako pozvana varijabla nije postavljena.
Ali postoje mnoge druge mogućnosti. Ponekad su u manama opisani previše zbunjujuće, pa sam ovdje sakupio neke od najkorisnijih, s objašnjenjima.
Napomena: Mac računala mogu imati stariju verziju basha (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 naredbenog retka. Možete koristiti ugrađene naredbe set
и shopt
. Obje mijenjaju ponašanje ljuske, rade gotovo istu stvar (s različitim argumentima), ali se razlikuju po njima set
su naslijeđeni ili posuđeni od parametara drugih ljuski, dok su parametri shopt
stvoreno u bashu.
Ako želite vidjeti trenutne opcije, pokrenite:
$ set -o
$ shopt
Za aktiviranje opcije u set
Koristi se duga ili kratka sintaksa:
$ set -o errunset
$ set -e
Učinak je isti.
Da biste onemogućili opciju, trebate staviti plus umjesto minusa:
$ set +e
Dugo se nisam mogao sjetiti ove sintakse jer mi se činilo da je logika pogrešna (znak minus omogućuje opciju, a znak plus je onemogućuje).
В 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
Mijenjanje imenika
Postoji nekoliko opcija koje vam pomažu u radu s imenicima.
1.cdspell
S ovom postavkom, bash će početi razumijevati pogreške pri upisu i odvest će vas do mape čije ste ime pogrešno napisali.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Koristim ovu opciju dugi niz godina i vrlo rijetko (možda jednom godišnje) donosi vrlo čudnu odluku. Ali drugim danima cdspell
štedi vrijeme, doslovno svaki dan.
2. autocd
Ako niste voljni prihvatiti neučinkovitost višestrukih unosa cd
, tada možete postaviti ovu opciju za pomicanje u mapu X ako naredba X ne postoji.
$ shopt -s autocd
$ abcdefg
$ cd ..
U kombinaciji s automatskim dovršavanjem, ovo vam omogućuje brzo skakanje između mapa:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Samo nemojte imenovati mapu rm -rf *
(da, usput, ovo je moguće).
3.direxpand
Ovo je cool opcija koja proširuje varijable okoline 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
Čisti izlaz
4. provjera poslova
Ova opcija zaustavlja odjavu iz sesije ako još postoje poslovi koji se izvode u pozadini.
Umjesto izlaza, prikazuje se popis nedovršenih zadataka. Ako i dalje želite izaći, uđite ponovno 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 vam opcija daje supermoći zamjene! Ako unesete:
$ shopt -s globstar
$ ls **
tada će ljuska rekurzivno prikazati sve direktorije i poddirektorije.
U kombinaciji s direxpand
Možete brzo pregledati sve niže u hijerarhiji:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6. ekstglob
Ova opcija omogućuje značajke koje se češće povezuju s regularnim izrazima. Ponekad je ovo vrlo korisno:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Ovdje su uzorci smješteni u zagrade i odvojeni okomitom crtom. Ovo su dostupni operateri:
? = odgovara nuli ili jednom pojavljivanju zadanih uzoraka! = prikaži sve što ne odgovara zadanim uzorcima * = nula ili više pojavljivanja + = jedno ili više pojavljivanja @ = točno jedno pojavljivanje
Zaštita od nezgoda
7. histverificirati
U početku može biti pomalo zastrašujuće koristiti naredbe za brzo pokretanje iz povijesti kratica !!
и !$
.
Opcija histverify
omogućuje vam da prvo vidite kako Bash tumači naredbu prije nego što se stvarno pokrene:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
Opet, radi zaštite od nezgoda, naime od prepisivanja datoteke koja već postoji s operatorom preusmjeravanja (>
). Ovo može biti katastrofa ako nemate sigurnosnu 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