Walong Hindi Kilalang Mga Opsyon sa Bash

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 dito o dito.

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 pinagmulan. Mga pagpipilian 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

Magdagdag ng komento