Ang ilang mga pagpipilian sa Bash ay kilala at madalas na ginagamit. Halimbawa, maraming tao ang nagsusulat sa simula ng script
itakda -o xtrace
para sa pag-debug,
itakda -o errexit
na lumabas nang hindi sinasadya o
set -o errunset
upang lumabas kung ang tinatawag na variable ay hindi nakatakda.
Ngunit mayroong maraming iba pang mga pagpipilian. Minsan ang mga ito ay inilarawan nang masyadong nakakalito sa manas, kaya nakolekta ko ang ilan sa mga pinaka-kapaki-pakinabang dito, na may paliwanag.
Tandaan: Maaaring may mas lumang bersyon ng bash ang mga Mac (3.x sa halip na 4.x) kung saan hindi available ang lahat ng opsyong ito. Sa kasong ito, tingnan
set
o shopt
?
Mayroong dalawang paraan upang magtakda ng mga opsyon sa bash: mula sa isang script o mula sa command line. Maaari mong gamitin ang mga built-in na command set
ΠΈ shopt
. Parehong nagbabago ang pag-uugali ng shell, gawin ang parehong bagay (na may iba't ibang mga argumento), ngunit naiiba sa kanilang set
ay minana o hiniram mula sa mga parameter ng iba pang mga shell, habang ang mga parameter shopt
nilikha sa bash.
Kung gusto mong makita ang kasalukuyang mga opsyon, patakbuhin ang:
$ set -o
$ shopt
Upang i-activate ang opsyon sa set
Mahaba o maikling syntax ang ginagamit:
$ set -o errunset
$ set -e
Ang epekto ay pareho.
Upang hindi paganahin ang pagpipilian, kailangan mong maglagay ng plus sa halip na isang minus:
$ set +e
Sa loob ng mahabang panahon ay hindi ko maalala ang syntax na ito dahil ang lohika ay tila mali (isang minus sign ay nagbibigay-daan sa opsyon, at isang plus sign ay hindi pinapagana ito).
Π shopt
(mas lohikal) na mga flag ay ginagamit upang paganahin at huwag paganahin ang mga opsyon -s
(set) at -u
(hindi nakatakda):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Pagbabago ng mga direktoryo
Mayroong ilang mga opsyon na makakatulong sa iyong magtrabaho sa mga direktoryo.
1.cdspell
Sa setting na ito, magsisimulang maunawaan ng bash ang mga typo at dadalhin ka sa folder na ang pangalan ay mali ang spelling mo.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Ginagamit ko ang opsyong ito sa loob ng maraming taon at napakabihirang (marahil isang beses sa isang taon) nakakagawa ito ng kakaibang desisyon. Ngunit sa ibang mga araw cdspell
nakakatipid ng oras, literal araw-araw.
2. autocd
Kung hindi ka handa na tanggapin ang kawalan ng kakayahan ng maramihang mga entry cd
, pagkatapos ay maaari mong itakda ang opsyong ito upang lumipat sa X folder kung ang X command ay hindi umiiral.
$ shopt -s autocd
$ abcdefg
$ cd ..
Kasama ng autocomplete, binibigyang-daan ka nitong mabilis na tumalon sa pagitan ng mga folder:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Huwag lang pangalanan ang folder rm -rf *
(oo nga pala, posible ito).
3.direxpand
Ito ay isang cool na opsyon na nagpapalawak ng mga variable ng kapaligiran sa pamamagitan ng pagpindot sa Tab:
$ shopt -s direxpand
$ ./[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/current_working_folder
$ ~/[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/home/folder
$ $HOME/[TAB] # Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°...
$ /full/path/to/home/folder
malinis na output
4. checkjobs
Ihihinto ng opsyong ito ang pag-log out sa session kung may mga trabaho pa ring tumatakbo sa background.
Sa halip na lumabas, ang isang listahan ng mga hindi natapos na gawain ay ipinapakita. Kung gusto mo pa ring lumabas, pagkatapos ay pumasok muli 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 ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ
Mga superpower ng pagpapalit
5.globstar
Ang pagpipiliang ito ay nagbibigay sa iyo ng mga superpower sa pagpapalit! Kung pumasok ka:
$ shopt -s globstar
$ ls **
pagkatapos ay ipapakita ng shell ang lahat ng mga direktoryo at mga subdirektoryo nang recursively.
Kasama sa direxpand
Mabilis mong matitingnan ang lahat ng mas mababa sa hierarchy:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
Ang opsyong ito ay nagbibigay-daan sa mga feature na mas karaniwang nauugnay sa mga regular na expression. Minsan ito ay lubhang kapaki-pakinabang:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Dito inilalagay ang mga pattern sa panaklong at pinaghihiwalay ng isang vertical bar. Narito ang mga magagamit na operator:
? = tumutugma sa zero o isang paglitaw ng mga ibinigay na pattern! = ipakita ang lahat ng bagay na hindi tumutugma sa ibinigay na mga pattern * = zero o higit pang mga pangyayari + = isa o higit pang mga pangyayari @ = eksaktong isang pangyayari
Proteksyon sa aksidente
7. histverify
Maaaring medyo nakakatakot sa simula na gamitin ang mga command ng mabilisang paglulunsad mula sa kasaysayan ng mga pagdadaglat !!
ΠΈ !$
.
Pagpipilian histverify
hinahayaan ka munang makita kung paano binibigyang kahulugan ng Bash ang utos bago ito aktwal na tumakbo:
$ shopt -s histverify
$ echo !$ # <= ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Enter ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ
$ echo histverify # <= ΠΠ½Π° ΡΠ½Π°ΡΠ°Π»Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅,
histverify # <= Π° ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ
8. Noclobber
Muli, upang maprotektahan laban sa mga aksidente, lalo na mula sa pag-overwrite sa isang file na mayroon na sa redirect operator (>
). Maaari itong maging isang sakuna kung wala kang backup.
Pagpipilian set -Π‘
ipinagbabawal ang gayong pag-overwrite. Kung kinakailangan, maaari mong laktawan ang proteksyon gamit ang operator >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Pinagmulan: www.habr.com