Ok Malgrandaj Konataj Bash-Ebloj

Kelkaj Bash-opcioj estas konataj kaj ofte uzataj. Ekzemple, multaj homoj skribas komence de la skripto

aro -o xtrace

por senararigado,

set -o errexit

eliri erare aŭ

set -o errunset

eliri se la vokita variablo ne estas agordita.

Sed estas multaj aliaj ebloj. Kelkfoje ili estas priskribitaj tro konfuze en manas, do mi kolektis ĉi tie kelkajn el la plej utilaj, kun klarigo.

Noto: Macs eble havas pli malnovan version de bash (3.x prefere ol 4.x) kie ne ĉiuj ĉi tiuj opcioj estas disponeblaj. En ĉi tiu kazo, vidu tietie.

setshopt?

Estas du manieroj agordi bash-opciojn: de skripto aŭ de la komandlinio. Vi povas uzi enkonstruitajn komandojn set и shopt. Ambaŭ ŝanĝas la konduton de la ŝelo, faras preskaŭ la samon (kun malsamaj argumentoj), sed malsamas en sia origino. Opcioj set estas hereditaj aŭ pruntitaj de parametroj de aliaj ŝeloj, dum parametroj shopt kreita en bash.

Se vi volas vidi la nunajn eblojn, rulu:

$ set -o
$ shopt

Por aktivigi la opcion en set Longa aŭ mallonga sintakso estas uzata:

$ set -o errunset
$ set -e

La efiko estas la sama.

Por malŝalti la opcion, vi devas meti pluson anstataŭ minuso:

$ set +e

Longe mi ne povis memori tiun ĉi sintakson ĉar la logiko ŝajnis malĝusta (minus-signo ebligas la opcion, kaj plus-signo malŝaltas ĝin).

В shopt (pli logikaj) flagoj estas uzataj por ebligi kaj malŝalti opciojn -s (aro) kaj -u (malŝaltita):

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

Ŝanĝante dosierujojn

Estas pluraj ebloj, kiuj helpas vin labori kun dosierujoj.

1.cdspell

Kun ĉi tiu agordo, bash komencos kompreni tajperarojn kaj kondukos vin al la dosierujo, kies nomon vi misliterumis.

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

Mi uzas ĉi tiun opcion dum multaj jaroj kaj tre malofte (eble unufoje jare) ĝi faras tre strangan decidon. Sed en aliaj tagoj cdspell ŝparas tempon, laŭvorte ĉiutage.

2. aŭtokd

Se vi ne pretas akcepti la neefikecon de multoblaj enskriboj cd, tiam vi povas agordi ĉi tiun opcion movi al la X-dosierujo se la X-komando ne ekzistas.

$ shopt -s autocd
$ abcdefg
$ cd ..

Kombinita kun aŭtomata kompletigo, ĉi tio permesas vin rapide salti inter dosierujoj:

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

Simple ne nomu la dosierujon rm -rf * (jes, cetere, tio eblas).

3.dire vastigi

Ĉi tio estas bonega opcio, kiu vastigas mediajn variablojn premante Tab:

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

Pura eligo

4. kontrollaboroj

Ĉi tiu opcio ĉesas elsaluti el la sesio se ankoraŭ estas laboroj kurantaj en la fono.

Anstataŭ eliri, listo de nefinitaj taskoj estas montrata. Se vi ankoraŭ volas eliri, tiam eniru denove 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 процесса  изменился

Anstataŭaj superpotencoj

5.globstar

Ĉi tiu opcio donas al vi anstataŭajn superpotencojn! Se vi eniras:

$ shopt -s globstar
$ ls **

tiam la ŝelo montros ĉiujn dosierujojn kaj subdosierujojn rekursie.

Lige kun direxpand Vi povas rapide vidi ĉion pli malaltan en la hierarkio:

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

6.extglob

Ĉi tiu opcio ebligas funkciojn, kiuj estas pli ofte asociitaj kun regulaj esprimoj. Kelkfoje ĉi tio estas tre utila:

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

Ĉi tie la ŝablonoj estas metitaj en krampoj kaj apartigitaj per vertikala stango. Jen la disponeblaj telefonistoj:

? = kongruas nul aŭ unu okazon de la donitaj ŝablonoj ! = montri ĉion, kio ne kongruas kun la donitaj ŝablonoj * = nul aŭ pli da okazoj + = unu aŭ pli da okazoj @ = ekzakte unu okazo

Protekto kontraŭ akcidento

7. histverify

Komence povas esti iom timiga uzi la rapidajn lanĉajn komandojn el la historio de mallongigoj !! и !$.

Opcio histverify ebligas vin unue vidi kiel Bash interpretas la komandon antaŭ ol ĝi efektive ruliĝas:

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

8. Noclobber

Denove, por protekti kontraŭ akcidentoj, nome kontraŭ anstataŭigo de dosiero, kiu jam ekzistas kun la alidirekta operatoro (>). Ĉi tio povas esti katastrofo se vi ne havas sekurkopion.

Opcio set -С malpermesas tian superskribon. Se necese, vi povas preteriri la protekton uzante la funkciigiston >|:

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

fonto: www.habr.com

Aldoni komenton