Yim Me Me Me Bash Options

Qee qhov kev xaiv Bash paub zoo thiab feem ntau siv. Piv txwv li, ntau tus neeg sau thaum pib ntawm tsab ntawv

teeb -o xtrace

rau debugging,

teeb -o errexit

tawm los ntawm yuam kev los yog

set -o errunset

kom tawm yog qhov hu ua hloov pauv tsis tau teeb tsa.

Tab sis muaj ntau lwm txoj kev xaiv. Qee lub sij hawm lawv tau piav qhia tsis meej pem hauv manas, yog li kuv tau sau qee qhov tseem ceeb tshaj plaws ntawm no, nrog kev piav qhia.

Nco tseg: Macs yuav muaj qhov qub version ntawm bash (3.x es tsis yog 4.x) qhov twg tsis yog tag nrho cov kev xaiv no muaj. Hauv qhov no, saib no los yog no.

set los yog shopt?

Muaj ob txoj hauv kev los teeb tsa bash xaiv: los ntawm tsab ntawv lossis los ntawm kab hais kom ua. Koj tuaj yeem siv cov lus txib built-in set ΠΈ shopt. Ob leeg hloov tus cwj pwm ntawm lub plhaub, ua ntau yam tib yam (nrog kev sib cav sib txawv), tab sis txawv ntawm lawv keeb kwm. Kev xaiv set tau txais los yog qiv los ntawm cov kev txwv ntawm lwm cov plhaub, thaum tsis muaj shopt tsim nyob rau hauv bash.

Yog tias koj xav pom cov kev xaiv tam sim no, khiav:

$ set -o
$ shopt

Txhawm rau qhib qhov kev xaiv hauv set Ntev lossis luv syntax yog siv:

$ set -o errunset
$ set -e

Cov nyhuv yog tib yam.

Txhawm rau lov tes taw qhov kev xaiv, koj yuav tsum muab ib qho ntxiv es tsis txhob rho tawm:

$ set +e

Tau ntev kuv tsis tuaj yeem nco qab cov ntsiab lus no vim tias lub logic zoo li tsis raug (ib qho kos npe rho tawm ua rau kev xaiv, thiab kos npe ntxiv rau nws).

Π’ shopt (ntau qhov laj thawj) chij yog siv los pab thiab lov tes taw kev xaiv -s (set) thiab -u (tsis tau):

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

Hloov cov npe

Muaj ntau txoj kev xaiv uas pab koj ua haujlwm nrog cov npe.

1.cd lus

Nrog rau qhov teeb tsa no, bash yuav pib nkag siab typos thiab yuav coj koj mus rau lub nplaub tshev uas nws lub npe koj sau tsis raug.

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

Kuv tau siv qhov kev xaiv no tau ntau xyoo thiab tsis tshua muaj (tej zaum ib xyoos ib zaug) nws ua rau kev txiav txim siab txawv txawv. Tab sis nyob rau lwm hnub cdspell txuag lub sij hawm, lus txhua hnub.

2. autocd

Yog tias koj tsis kam lees txais qhov tsis muaj txiaj ntsig ntawm ntau qhov kev nkag cd, ces koj tuaj yeem teeb tsa qhov kev xaiv no txav mus rau X nplaub tshev yog tias X hais kom ua tsis muaj.

$ shopt -s autocd
$ abcdefg
$ cd ..

Ua ke nrog autocomplete, qhov no tso cai rau koj dhia nrawm ntawm cov folders:

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

Cia li tsis txhob sau npe rm -rf * (yog, los ntawm txoj kev, qhov no yog ua tau).

3. direxpand

Qhov no yog qhov kev xaiv txias uas nthuav tawm ib puag ncig hloov pauv los ntawm nias Tab:

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

Ntxuav tawm

4. checkjobs

Qhov kev xaiv no txwv tsis pub nkag tawm ntawm qhov kev sib kho yog tias tseem muaj cov haujlwm ua haujlwm hauv keeb kwm yav dhau.

Es tsis txhob tawm, ib daim ntawv teev cov hauj lwm ua tsis tiav yog tshwm sim. Yog tias koj tseem xav tawm, ces nkag dua 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 процСсса  измСнился

Hloov cov superpowers

5.globstar

Qhov kev xaiv no muab rau koj hloov pauv superpowers! Yog tias koj nkag mus:

$ shopt -s globstar
$ ls **

ces lub plhaub yuav qhia tag nrho cov directory thiab subdirectories recursively.

Tau nrog direxpand Koj tuaj yeem pom txhua yam qis dua hauv hierarchy:

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

6.extglob

Qhov kev xaiv no ua rau cov yam ntxwv uas feem ntau cuam tshuam nrog cov kab lus tsis tu ncua. Qee zaum qhov no tseem ceeb heev:

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

Ntawm no cov qauv yog muab tso rau hauv kab lus thiab sib cais los ntawm ib tug ntsug bar. Nov yog cov neeg ua haujlwm muaj:

? = matches xoom lossis ib qho tshwm sim ntawm cov qauv muab
! = qhia txhua yam uas tsis phim cov qauv muab
* = xoom lossis ntau qhov tshwm sim
+ = ib lossis ntau qhov tshwm sim
@ = raws nraim ib qho tshwm sim

Kev tiv thaiv xwm txheej

7. histverify

Nws tuaj yeem txaus ntshai me ntsis thaum xub thawj siv cov lus txib ceev ceev los ntawm keeb kwm ntawm cov ntawv luv !! ΠΈ !$.

Xaiv histverify cia koj xub pom li cas Bash txhais cov lus txib ua ntej nws ua haujlwm:

$ shopt -s histverify
$ echo !$          # <= По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Enter ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ запускаСтся
$ echo histverify  # <= Она сначала дСмонстрируСтся Π½Π° экранС,
histverify         # <= Π° ΠΏΠΎΡ‚ΠΎΠΌ запускаСтся 

8. Noclobber

Ntxiv dua thiab, los tiv thaiv kev raug xwm txheej, uas yog los ntawm kev sau cov ntaub ntawv uas twb muaj lawm nrog tus neeg teb xov tooj redirect (>). Qhov no tuaj yeem ua rau muaj kev puas tsuaj yog tias koj tsis muaj qhov thaub qab.

Xaiv set -Π‘ txwv tsis pub muaj kev sau ntau dhau. Yog tias tsim nyog, koj tuaj yeem hla kev tiv thaiv siv tus neeg teb xov tooj >|:

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

Tau qhov twg los: www.hab.com

Ntxiv ib saib