ืึทื›ื˜ ืงืœื™ื™ืŸ-ื‘ืืงืื ื˜ ื‘ืึทืฉ ืึธืคึผืฆื™ืขืก

ืขื˜ืœืขื›ืข Bash ืึธืคึผืฆื™ืขืก ื–ืขื ืขืŸ ื‘ืึทื•ื•ื•ืกื˜ ืื•ืŸ ืึธืคื˜ ื’ืขื ื™ืฆื˜. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืคื™ืœืข ืžืขื ื˜ืฉืŸ ืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ื™ ืฉืจื™ืคื˜

ืฉื˜ืขืœืŸ-ืึธ ืงืกื˜ืจืึทืกืข

ืคึฟืึทืจ ื“ื™ื‘ืึทื’ื™ื ื’,

ืฉื˜ืขืœืŸ -ืึธ ืขืจืจืขืงืกื™ื˜

ืฆื• ืึทืจื•ื™ืกื’ืึทื ื’ ื“ื•ืจืš ื’ืจื™ื™ึทื– ืึธื“ืขืจ

ืฉื˜ืขืœืŸ -ืึธ ืขืจืจืึทื ืกืขื˜

ืฆื• ืึทืจื•ื™ืกื’ืึทื ื’ ืื•ื™ื‘ ื“ื™ ื’ืขืจื•ืคึฟืŸ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืื™ื– ื ื™ืฉื˜ ื‘ืึทืฉื˜ื™ืžื˜.

ืื‘ืขืจ ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืื ื“ืขืจืข ืึธืคึผืฆื™ืขืก. ืžืืœ ื–ื™ื™ ื–ืขื ืขืŸ ื“ื™ืกืงืจื™ื™ื‘ื“ ืฆื• ืงืึทื ืคื™ื•ื–ื™ื ื’ ืื™ืŸ ืžืึทื ืึทืก, ืึทื–ื•ื™ ืื™ืš ื”ืึธื‘ืŸ ื’ืขื–ืืžืœื˜ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืžืขืจืกื˜ ื ื•ืฆื™ืง ืึธื ืขืก ื“ืึธ, ืžื™ื˜ ื“ืขืจืงืœืขืจื•ื ื’.

ื‘ืึทืžืขืจืงื•ื ื’: ืžืึทืงืก ืงืขืŸ ื”ืึธื‘ืŸ ืึทืŸ ืขืœื˜ืขืจืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื‘ืึทืฉ (3.x ืืœื ื•ื•ื™ 4.x) ื•ื•ื• ื ื™ื˜ ืึทืœืข ื“ื™ ืึธืคึผืฆื™ืขืก ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื. ืื™ืŸ ื“ืขื ืคืึทืœ, ื–ืขืŸ ื“ืึธ ืึธื“ืขืจ ื“ืึธ.

set ืึธื“ืขืจ shopt?

ืขืก ื–ืขื ืขืŸ ืฆื•ื•ื™ื™ ื•ื•ืขื’ืŸ ืฆื• ืฉื˜ืขืœืŸ ื‘ืึทืฉ ืึธืคึผืฆื™ืขืก: ืคึฟื•ืŸ ืึท ืฉืจื™ืคื˜ ืึธื“ืขืจ ืคึฟื•ืŸ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื”. ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืงืึทืžืึทื ื“ื– set ะธ shopt. ื‘ื™ื™ื“ืข ื˜ื•ื™ืฉืŸ ื“ื™ ื ืึทื˜ื•ืจ ืคื•ืŸ ื“ื™ ืฉืึธืœ, ื˜ืึธืŸ ืคื™ืœ ื“ื™ ื–ืขืœื‘ืข ื–ืึทืš (ืžื™ื˜ ืคืึทืจืฉื™ื“ืขื ืข ื˜ืขื ื•ืช), ืึธื‘ืขืจ ืึทื ื“ืขืจืฉ ืื™ืŸ ื–ื™ื™ืขืจ ืึธื ื”ื™ื™ื‘... ืึธืคึผืฆื™ืขืก set ื–ืขื ืขืŸ ื™ื ื›ืขืจืึทื˜ื™ื“ ืึธื“ืขืจ ื‘ืึทืจืึธื•ื“ ืคื•ืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืคื•ืŸ ืื ื“ืขืจืข ืฉืขืœื–, ื‘ืฉืขืช ืคึผืึทืจืึทืžืขื˜ืขืจืก shopt ื‘ืืฉืืคืŸ ืื™ืŸ ื‘ืึทืฉ.

ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื–ืขืŸ ื“ื™ ืงืจืึทื ื˜ ืึธืคึผืฆื™ืขืก, ืœื•ื™ืคืŸ:

$ 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.ื’ืœืึธื‘ืกื˜ืึทืจ

ื“ืขื ืึธืคึผืฆื™ืข ื’ื™ื˜ ืื™ืจ ืกืึทื‘ืกื˜ื™ื˜ื•ืฉืึทืŸ ืกื•ืคึผืขืจืคึผืึทื•ืขืจื–! ืื•ื™ื‘ ืื™ืจ ืึทืจื™ื™ึทืŸ:

$ shopt -s globstar
$ ls **

ื“ืขืจื ืึธืš ื“ื™ ืฉืึธืœ ื•ื•ืขื˜ ื•ื•ื™ื™ึทื–ืŸ ืึทืœืข ื“ื™ื™ืจืขืงื˜ืขืจื™ื– ืื•ืŸ ืกื•ื‘ื“ื™ืจืขืงื˜ืึธืจื™ืขืก ืจืขืงื•ืจืกื™ื•ื•ืขืœื™.

ืฆื•ื–ืึทืžืขืŸ ืžื™ื˜ direxpand ืื™ืจ ืงืขื ืขืŸ ื’ืขืฉื•ื•ื™ื ื“ ื–ืขืŸ ืึทืœืฅ ื ื™ื“ืขืจื™ืงืขืจ ืื™ืŸ ื“ื™ ื›ื™ื™ืขืจืึทืจืงื™:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.ืขืงืกื˜ื’ืœืึธื‘

ื“ืขืจ ืึธืคึผืฆื™ืข ื™ื ื™ื™ื‘ืึทืœื– ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ืžืขืจ ืงืึทืžืึทื ืœื™ ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ืจืขื’ื•ืœืขืจ ืื•ื™ืกื“ืจื•ืงืŸ. ืžืืœ ื“ืึธืก ืื™ื– ื–ื™ื™ืขืจ ื ื•ืฆื™ืง:

$ 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. ื ืึธืงืœืึทื‘ื‘ืขืจ

ื•ื•ื™ื“ืขืจ, ืฆื• ื‘ืึทืฉื™ืฆืŸ ืงืขื’ืŸ ืึทืงืกืึทื“ืึทื ืฅ, ื ื™ื™ืžืœื™ ืคื•ืŸ ืึธื•ื•ื•ืขืจืจื™ื™ื˜ื™ื ื’ ืึท ื˜ืขืงืข ื•ื•ืึธืก ืฉื•ื™ืŸ ื™ื’ื–ื™ืกืฅ ืžื™ื˜ ื“ื™ ืจื™ื“ืขืจืขืงื˜ ืึธืคึผืขืจืึทื˜ืึธืจ (>). ื“ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ืึท ื•ืžื’ืœื™ืง ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืึท ื‘ืึทืงืึทืคึผ.

ืึธืคึผืฆื™ืข set -ะก ืคืืจื‘ืื˜ ืื–ื ืื™ื‘ืขืจืฉืจื™ื™ื‘ืŸ. ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืื™ืจ ืงืขื ืขืŸ ื‘ื™ื™ืคึผืึทืก ื“ื™ ืฉื•ืฅ ื“ื•ืจืš ื“ื™ ืึธืคึผืขืจืึทื˜ืึธืจ >|:

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

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’