αž‡αž˜αŸ’αžšαžΎαžŸ Bash αžŠαŸ‚αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αžαž·αž…αžαž½αž…αž…αŸ†αž“αž½αž“αž”αŸ’αžšαžΆαŸ†αž”αžΈ

αž‡αž˜αŸ’αžšαžΎαžŸ Bash αž˜αž½αž™αž…αŸ†αž“αž½αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹ αž“αž·αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαžšαžŸαŸαžšαž“αŸ…αžŠαžΎαž˜αž’αžαŸ’αžαž”αž‘

αž€αŸ†αžŽαžαŸ‹ -o xtrace

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ‚αž€αŸ†αž αž»αžŸ,

αžŸαŸ†αžŽαž»αŸ† -o errexit

αž…αžΆαž€αž…αŸαž‰αžŠαŸ„αž™αž€αŸ†αž αž»αžŸαž¬

set -o errunset

αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž€αž…αŸαž‰ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αžαŸαžšαž αŸ…αžαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ€αžαŸ” αž–αŸαž›αžαŸ’αž›αŸ‡αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžŠαŸ„αž™αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹αž–αŸαž€αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŽαžΆαžŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž”αŸ†αž•αž»αžαž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αŸ”

αž…αŸ†αžŽαžΆαŸ†αŸ– Macs αž’αžΆαž…αž˜αžΆαž“αž€αŸ†αžŽαŸ‚αž…αžΆαžŸαŸ‹αž“αŸƒ bash (3.x αž‡αžΆαž‡αžΆαž„ 4.x) αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž‘αŸαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αžŸαžΌαž˜αž˜αžΎαž› αž“αŸ…αž‘αžΈαž“αŸαŸ‡ ឬ αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

set ឬ shopt?

αž˜αžΆαž“αžœαž·αž’αžΈαž–αžΈαžšαž™αŸ‰αžΆαž„αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž‡αž˜αŸ’αžšαžΎαžŸ bash: αž–αžΈαžŸαŸ’αž‚αŸ’αžšαžΈαž” αž¬αž–αžΈαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ set ΠΈ shopt. αž‘αžΆαŸ†αž„αž–αžΈαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž₯αžšαž·αž™αžΆαž”αžαžšαž”αžŸαŸ‹αžŸαŸ‚αž›αž’αŸ’αžœαžΎαžŠαžΌαž…αž‚αŸ’αž“αžΆαž…αŸ’αžšαžΎαž“ (αžŠαŸ„αž™αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆ) αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαž»αžŸαž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αž”αŸ’αžšαž—αž–αžŠαžΎαž˜. αž‡αž˜αŸ’αžšαžΎαžŸ set αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αž˜αžšαžαž€αž¬αžαŸ’αž…αžΈαž–αžΈαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸƒαžŸαŸ‚αž›αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš shopt αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ bash αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αžƒαžΎαž‰αž‡αž˜αŸ’αžšαžΎαžŸαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αžŸαžΌαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

$ set -o
$ shopt

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸ…αž€αŸ’αž“αž»αž„ set αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžœαŸ‚αž„αž¬αžαŸ’αž›αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ–

$ set -o errunset
$ set -e

αž₯αž‘αŸ’αž’αž·αž–αž›αž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž”αž·αž‘αž‡αž˜αŸ’αžšαžΎαžŸ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαžΆαž€αŸ‹αž”αžΌαž€αž‡αŸ†αž“αž½αžŸαžŠαž€αžŠαž€αŸ–

$ set +e

αž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αžΆαž™αžΌαžšαž˜αž€αž αžΎαž™ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž…αžΆαŸ†αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸαŸ‡αž‘αŸ αžŠαŸ„αž™αžŸαžΆαžšαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαž»αžŸ (αžŸαž‰αŸ’αž‰αžΆαžŠαž€αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž‡αž˜αŸ’αžšαžΎαžŸ αž αžΎαž™αžŸαž‰αŸ’αž‰αžΆαž”αžΌαž€αž”αž·αž‘αžœαžΆ)αŸ”

Π’ 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 αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ X αž˜αž·αž“αž˜αžΆαž“αŸ”

$ shopt -s autocd
$ abcdefg
$ cd ..

αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž”αŸ†αž–αŸαž‰αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž›αŸ„αžαž™αŸ‰αžΆαž„αž›αžΏαž“αžšαžœαžΆαž„αžαžαž―αž€αžŸαžΆαžšαŸ–

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

αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž˜αž·αž“αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžαž rm -rf * (αž”αžΆαž‘, αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡, αž“αŸαŸ‡αž‚αžΊαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“) αŸ”

3. direxpand

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαž›αŸ’αž’αžŠαŸ‚αž›αž–αž„αŸ’αžšαžΈαž€αž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“αžŠαŸ„αž™αž…αž»αž…αžαŸαž”αŸ–

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

αž›αž‘αŸ’αž’αž•αž›αžŸαŸ’αž’αžΆαž

4. αž€αžΆαžšαž„αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™

αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸαŸ‡αž”αž‰αŸ’αžˆαž”αŸ‹αž€αžΆαžšαž…αŸαž‰αž–αžΈαžŸαž˜αŸαž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸ…αžαŸ‚αž˜αžΆαž“αž€αžΆαžšαž„αžΆαžšαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™αŸ”

αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž…αžΆαž€αž…αŸαž‰ αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž“αŸ…αžαŸ‚αž…αž„αŸ‹αž…αŸαž‰ αžŸαžΌαž˜αž…αžΌαž›αž˜αŸ’αžαž„αž‘αŸ€αž 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 **

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŸαŸ‚αž›αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αžαž αž“αž·αž„αžαžαžšαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αžΎαž„αžœαž·αž‰αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ 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. αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹

αžœαžΆαž’αžΆαž…αž‡αžΆαž€αžΆαžšαž‚αž½αžšαž±αŸ’αž™αžαŸ’αž›αžΆαž…αž”αž“αŸ’αžαž·αž…αž“αŸ…αž–αŸαž›αžŠαŸ†αž”αžΌαž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž αŸαžŸαž–αžΈαž”αŸ’αžšαžœαžαŸ’αžαž·αž’αž€αŸ’αžŸαžšαž€αžΆαžαŸ‹ !! ΠΈ !$.

αž‡αž˜αŸ’αžšαžΎαžŸ histverify αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› Bash αž”αž€αžŸαŸ’αžšαžΆαž™αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž˜αž»αž“αž–αŸαž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ–

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

8. Noclobber

αž‡αžΆαžαŸ’αž˜αžΈαž˜αŸ’αžαž„αž‘αŸ€αž αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžšαž–αžΆαžšαž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž‚αŸ’αžšαŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹ αž–αŸ„αž›αž‚αžΊαž–αžΈαž€αžΆαžšαžŸαžšαžŸαŸαžšαž‡αžΆαž“αŸ‹αž›αžΎαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžšαž½αž…αž αžΎαž™αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž”αŸ’αžαžΌαžšαž‘αž·αžŸ (>) αž“αŸαŸ‡αž’αžΆαž…αž‡αžΆαž‚αŸ’αžšαŸ„αŸ‡αž˜αž αž“αŸ’αžαžšαžΆαž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€αŸ”

αž‡αž˜αŸ’αžšαžΎαžŸ set -Π‘ αž αžΆαž˜αžƒαžΆαžαŸ‹αž€αžΆαžšαžŸαžšαžŸαŸαžšαž‡αžΆαž“αŸ‹αž›αžΎαž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž”αžΎαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž’αŸ’αž“αž€αž’αžΆαž…αžšαŸ†αž›αž„αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš >|:

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

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹