á¡áá»áá¯á·áá±á¬ Bash ááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠáá±á¬ááºážá áœá¬ááááŒá®áž á¡áá¯á¶ážááŒá¯áá±á·ááŸááááºá á¥ááᬠáá¬ááºááœáŸááºážáá²á·á¡á ááŸá¬ áá°áá±á¬áºáá±á¬áºáá»á¬ážáá»á¬ážáá±ážááŒáááºá
-o xtrace set
áá®áá¬áááºá¡ááœááºá
-o errexit áá¯áááºááŸááºáá«
ááŸá¬ážááœááºážá áœá¬ááœááºááẠááá¯á·ááá¯ááº
set -o errunset
áá¯áá±á«áºáá±á¬ variable ááᯠáááºááŸááºááá¬ážáá«á ááœááºáááºá
áá«áá±ááá·áº áááŒá¬ážááœá±ážáá»ááºá
áá¬ááœá± á¡áá»á¬ážááŒá®ážááŸááá«áááºá áá
áºáá«áá
áºáá¶ááœáẠáááºážááá¯á·ááᯠmanas ááœáẠááŸá¯ááºááœá±ážá
áœá¬áá±á¬áºááŒáá¬ážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááẠá€áá±áá¬ááœáẠá¡áá¯á¶ážáááºáá¯á¶ážá¡áá¬á¡áá»áá¯á·ááᯠá
á¯á
ááºážááŒá®áž ááŸááºážááŒáá¬ážáá«áááºá
ááŸááºáá»ááº- Mac áá»á¬ážááœáẠá€ááœá±ážáá»ááºá
áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááááŸáááá¯ááºáá±á¬ bash (3.x ááẠ4.x á¡á
á¬áž XNUMX.x) á¡áá±á¬ááºážáá
áºáᯠááŸáááá¯ááºáá«áááºá á€ááá
á¹á
ááœááºááŒáá·áºáá«á
set
ááá¯á·ááá¯áẠshopt
?
bash ááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠáááºááŸááºááẠáááºážáááºáž ááŸá
áºáá¯ááŸááááº- script áá
áºáá¯á០ááá¯á·ááá¯áẠcommand line á០ááŒá
áºáááºá Built-in command áá»á¬ážááᯠáááºáá¯á¶ážááá¯ááºáááºá set
О shopt
. ááŸá
áºáá¯áá¯á¶ážááẠshell áá¡ááŒá¯á¡áá°ááá¯ááŒá±á¬ááºážáá²áááºá áá°áá®áá±á¬á¡áá¬áá»á¬ážá
áœá¬ááá¯ááŒá¯áá¯ááºááẠ(ááœá²ááŒá¬ážááŒá¬ážáá¬ážáá±á¬á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááŒáá·áº) ááá¯á·áá±á¬áºáááºážááá¯á·áááœá²ááŒá¬ážáááºá set
á¡ááŒá¬áž shells áá»á¬ážá parameters áá»á¬ážá០á¡ááœá±áááºáá¶ááŒááºáž ááá¯á·ááá¯áẠáá»á±ážáá°áá¬ážá
ááºááœáẠparameters áá»á¬ážááŒá
áºáááºá shopt
bash ááŒáá·áºáááºáá®ážáá¬ážáááºá
áááºááŸáááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠááŒáá·áºááá¯áá«áá run áá«á
$ set -o
$ shopt
ááœá±ážáá»ááºááŸá¯ááᯠá¡áááºááœááºážááẠset
á¡ááŸáẠááá¯á·ááá¯áẠá¡ááá¯áá±á¬áẠá¡áá¬ážá¡ááá¯ááᯠá¡áá¯á¶ážááŒá¯áááº-
$ set -o errunset
$ set -e
á¡áá»áá¯ážáááºáá±á¬ááºááŸá¯á á¡áá°áá°áá«áá²á
ááœá±ážáá»ááºááœáá·áºááᯠááááºáááºá á¡áá¯ááºá¡á á¬áž á¡áá±á«ááºážáá áºáᯠááá·áºááẠááá¯á¡ááºáááº-
$ set +e
áá±á¬á·áá»á áºá ááŸá¬ážáá¯á¶áá±á«ááºáá±áá¬ááŒá±á¬áá·áº áá® syntax ááᯠá¡áá»áááºá¡ááŒá¬ááŒá®áž áááŸááºááááá¯ááºáá«áá°áž (á¡áá¯ááºááá¹ááá¬á ááœá±ážáá»ááºááœáá·áºááᯠááœáá·áºáá±ážááŒá®áž á¡áá±á«ááºážááá¹ááá¬á áááºážááᯠááááºáá¬ážáá«áááº)á
Ð shopt
ááœá±ážáá»ááºá
áá¬áá»á¬ážááᯠááœáá·áºáááºááŸáá·áº ááááºááẠ(ááá¯ááá¯áá¯áá¹áááááºáá±á¬) á¡áá¶áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá¬ážáááºá -s
(áááºááŸááº) ááŸáá·áº -u
(ááááºááŸááºááá±áž):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
áááºážááœáŸááºáá»á¬ážááᯠááŒá±á¬ááºážáá²ááŒááºážá
áááºážááœáŸááºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáá¬ááœáẠáá°áá®áá±ážáá±á¬ ááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬ááŸááááºá
1.cdspell
á€áááºáááºááŒáá·áºá bash ááẠá á¬á á®á á¬ááá¯ááºááᯠáá¬ážáááºáá¬áááºááŒá áºááŒá®áž áááºá á¬áá¯á¶ážáá±á«ááºážááŸá¬ážáá±á¬á¡áááºááŸááá±á¬ ááá¯ááºááœá²ááá¯á· ááá·áºá¡á¬áž áá±á«áºáá±á¬ááºááœá¬ážáááºááŒá áºáááºá
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
áá»áœááºáá±á¬áº áá®ááœá±ážáá»ááºááŸá¯ááᯠááŸá
áºáá±á«ááºážáá»á¬ážá
áœá¬ á¡áá¯á¶ážááŒá¯áá²á·ááŒá®áž á¡ááœááºááŸá¬ážááŸá¬ážáá«ážáá«áž (áá
áºááŸá
áºááŸá¬ áá
áºááŒáááºááŒá
áºááá¯ááºáááº) áá«áᬠá¡ááœááºáá°ážáááºážáá²á· áá¯á¶ážááŒááºáá»ááºáá
áºáá¯áá«áá²á áá«áá±ááá·áº áááŒá¬ážáááºááœá±ááŸá¬ cdspell
áá±á·ááá¯ááºáž á¡áá»áááºáá¯ááºáááºáá¬áááºá
2. autocd
á¡áááºá áááºááẠáá»á¬ážááŒá¬ážááŸáá±á¬ ááá·áºááœááºážááŸá¯áá»á¬ážá áááá±á¬ááºááŸá¯áááŸáááŒááºážááᯠáááºááá¶ááá¯áá«á cd
ááá¯á·áá±á¬áẠX command ááá«ááŸááá«á X folder ááá¯á·ááœáŸá±á·ááẠá€ááœá±ážáá»ááºááŸá¯ááᯠáááºáááºááŸááºááá¯ááºáááºá
$ shopt -s autocd
$ abcdefg
$ cd ..
á¡ááá¯á¡áá»á±á¬ááºááŒáá·áºá áœááºááŒááºážááŸáá·áº áá±á«ááºážá ááºááŒááºážááŒáá·áºá áááºážááẠááá·áºá¡á¬áž ááá¯ááºááœá²áá»á¬ážááŒá¬ážááœáẠá¡ááŒááºáá¯ááºááá¯ááºá á±áááº-
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Folder ááᯠáá¬áááºááá±ážáá«áá²á·á rm -rf *
(áá¯ááºáá«áááºá áá«á ááŒá
áºááá¯ááºáá«áááº)á
3.direxpand
áááºážááẠTab ááá¯ááŸáááºááŒááºážááŒáá·áº áááºáááºážáá»ááºááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáá»á²á·ááœááºááá¯ááºááá·áº á¡á±ážááŒáá±á¬ááœá±ážáá»ááºááŸá¯áá áºáá¯ááŒá áºáááºá
$ shopt -s direxpand
$ ./[TAB] # заЌеМÑеÑÑÑ ÐœÐ°...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заЌеМÑеÑÑÑ ÐœÐ°...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заЌеМÑеÑÑÑ ÐœÐ°...
$ /full/path/to/home/folder
ááá·áºááŸááºážáá±á¬á¡ááœááº
4. checkjobs
áá±á¬ááºáá¶ááœáẠáá¯ááºáá±á¬ááºáá±ááá·áº á¡áá¯ááºáá»á¬ážááŸááá±áá±ážáá«á á€ááœá±ážáá»ááºááŸá¯ááẠá ááºááŸááºá០ááœááºááŒááºážá០áááºááá·áºáá«áááºá
ááœááºááá·áºá¡á
á¬ážá áááŒá®ážáá±ážáá±á¬ á¡áá¯ááºáá»á¬ážá
á¬áááºážááᯠááŒááááºá ááœááºáá»ááºáá±ážááẠáááºáááºáá«á 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 пÑПÑеÑÑа ОзЌеМОлÑÑ
á¡á á¬ážááá¯ážá á°áá«áá«áá«
5.globstar
á€ááœá±ážáá»ááºááŸá¯ááẠááá·áºá¡á¬áž á¡á á¬ážááá¯ážá á°áá«áá«áá«áá»á¬ážáá±ážáááºá áááºáááºáá±á¬ááºáá«á-
$ shopt -s globstar
$ ls **
ááá¯á·áá±á¬áẠshell ááẠdirectory áá»á¬ážááŸáá·áº subdirectories á¡á¬ážáá¯á¶ážááᯠrecursively ááŒáááá·áºáááºá
ááŸáá·áº ááœá²ááẠdirexpand
á¡áááºá¡á±á¬áẠá¡ááá·áºááŸá á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»ááºááŒááºá
áœá¬ ááŒáá·áºááŸá¯ááá¯ááºáááº-
$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n)
6.extglob
á€ááœá±ážáá»ááºááŸá¯ááẠáá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŸáá·áº ááá¯ááá¯áááºááá¯ááºááá·áº á¡ááºá¹áá«áááºáá»á¬ážááᯠááœáá·áºáá±ážáááºá áá áºáá«áá áºáᶠá€á¡áá¬ááẠá¡ááœááºá¡áá¯á¶ážáááºáááº-
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
á€áá±áá¬ááœáẠáá¯á¶á á¶áá»á¬ážááᯠááœááºážá á¥áºáá»á¬ážááœáẠááá·áºááœááºážáá¬ážááŒá®áž áá±á«ááºááá¯ááºáá¬ážááŒáá·áº ááá¯ááºážááŒá¬ážáá¬ážáááºá á€áááºááŸá¬ áááŸáááá¯ááºáá±á¬ á¡á±á¬áºááá±áá¬áá»á¬áž ááŒá áºáááº-
? = áá±ážáá¬ážáá±á¬áá¯á¶á á¶áá»á¬ážá áá¯á ááá¯á·ááá¯áẠááŒá áºáá»ááºááŸá¯áá áºáá¯ááŸáá·áº ááá¯ááºáá®áááºá ! = áá±ážáá¬ážáá±á¬ áá¯á¶á á¶áá»á¬ážááŸáá·áº áááá¯ááºáá®áá±á¬ á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒááá«á * = áá¯á ááá¯á·ááá¯áẠááá¯á·áááºááá¯áá±á¬ ááŒá áºáá±á«áºááŸá¯áá»á¬áž + = áá áºáᯠááá¯á·ááá¯áẠáá áºáá¯áááºááá¯áá±á¬ ááŒá áºáá»ááºááŸá¯áá»á¬áž @= ááá±áá¬áááºáž ááŒá áºáá»ááº
ááá±á¬áºáááá¬ááœááºááŸá¯
7. histify
á¡ááá¯áá±á¬ááºáá»á¬ážá áááá¯ááºážááŒá±á¬ááºážá០á¡ááŒááºáá
áºááœáŸááºááŒááºážá¡áááá·áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠá¡á
ááá¯ááºážááœáẠá¡áááºážáááºááŒá±á¬ááºá
áá¬áá±á¬ááºážáááºá !!
О !$
.
ááœá±ážáá»ááºá
áᬠhistverify
Bash ááẠcommand ááᯠá¡ááŸááºááááºááááºáááºáá®ááœáẠBash áá¡áááá¹áá¬ááºááœáá·áºááá¯áá¯á¶ááᯠááááá¯á¶ážááŒááºááœá±á·ááá¯ááºá
á±áááº-
$ shopt -s histverify
$ echo !$ # <= ÐП МажаÑÐžÑ Enter кПЌаМЎа Ме запÑÑкаеÑÑÑ
$ echo histverify # <= ÐМа ÑМаÑала ЎеЌПМÑÑÑОÑÑеÑÑÑ ÐœÐ° ÑкÑаМе,
histverify # <= а пПÑПЌ запÑÑкаеÑÑÑ
8. Noclobber
ááááºá ááá±á¬áºááááŸá¯ááŸáá¬ááœááºáááºá ááá¯ááá¯áááºááŸá¬ redirect operator ááŸáá·áºááŸáááŒá®ážáá¬ážááá¯ááºááᯠoverwrite áá¯ááºááŒááºážááŸáá¬ááœááºááẠ(>
) áááá¹áá°áááŸááá«á áááºážááẠáá±ážá¥áááºááŒá
áºá
á±ááá¯ááºáááºá
ááœá±ážáá»ááºá
áᬠset -С
ááá¯ááá¯á·áá±á¬ overwrite áá¬ážááŒá
áºáá¬ážáááºá ááá¯á¡ááºáá«áá áááºááẠá¡á±á¬áºááá±áá¬ááᯠá¡áá¯á¶ážááŒá¯á á¡áá¬á¡ááœááºááᯠáá»á±á¬áºááœáŸá¬ážááá¯ááºáááºá >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
source: www.habr.com