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