Osam malo poznatih opcija basha

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 здесь ili здесь.

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 podrijetlo. Mogućnosti 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

Dodajte komentar