ΠΠ΅ΠΊΠΎΠΈ ΠΎΠΏΡΠΈΠΈ Π½Π° Bash ΡΠ΅ Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ½ΠΎΠ³Ρ Π»ΡΡΠ΅ ΠΏΠΈΡΡΠ²Π°Π°Ρ Π½Π° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΡΡΠ΅Π½Π°ΡΠΈΠΎΡΠΎ
ΠΏΠΎΡΡΠ°Π²ΠΈ -o xtrace
Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅,
ΠΏΠΎΡΡΠ°Π²ΠΈ -ΠΎ Π΅ΡΠ΅ΠΊΡΠΈΡ
Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅Ρ ΠΏΠΎ Π³ΡΠ΅ΡΠΊΠ° ΠΈΠ»ΠΈ
ΡΠ΅Ρ -o Π³ΡΠ΅ΡΠΈ
Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅ΡΠ΅ Π°ΠΊΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°Π½Π°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π΅ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½Π°.
ΠΠΎ, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ. ΠΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΡΠΈΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π°Ρ ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ Π·Π±ΡΠ½ΡΠ²Π°ΡΠΊΠΈ Π²ΠΎ ΠΌΠ°Π½Π°, ΠΏΠ° Π·Π°ΡΠΎΠ° Π³ΠΈ ΡΠΎΠ±ΡΠ°Π² Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ Π½Π°ΡΠΊΠΎΡΠΈΡΠ½ΠΈΡΠ΅ ΠΎΠ²Π΄Π΅, ΡΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π°ΡΠ΅.
ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ°: Mac ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Π°Ρ ΠΏΠΎΡΡΠ°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° 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.cdspel
Π‘ΠΎ ΠΎΠ²Π°Π° ΠΏΠΎΡΡΠ°Π²ΠΊΠ°, bash ΡΠ΅ ΠΏΠΎΡΠ½Π΅ Π΄Π° Π³ΠΈ ΡΠ°Π·Π±ΠΈΡΠ° ΠΏΠ΅ΡΠ°ΡΠ½ΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΡΠ΅ Π²Π΅ ΠΎΠ΄Π½Π΅ΡΠ΅ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ΡΠΈΠ΅ ΠΈΠΌΠ΅ ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎ ΡΡΠ΅ Π³ΠΎ Π½Π°ΠΏΠΈΡΠ°Π»Π΅.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
ΠΠ²Π°Π° ΠΎΠΏΡΠΈΡΠ° ΡΠ° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΠΌΠ½ΠΎΠ³Ρ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ΡΠΊΠΎ (ΠΌΠΎΠΆΠ΅Π±ΠΈ Π΅Π΄Π½Π°Ρ Π³ΠΎΠ΄ΠΈΡΠ½ΠΎ) Π΄ΠΎΠ½Π΅ΡΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ ΡΡΠ΄Π½Π° ΠΎΠ΄Π»ΡΠΊΠ°. ΠΠΎ Π²ΠΎ Π΄ΡΡΠ³ΠΈΡΠ΅ Π΄Π΅Π½ΠΎΠ²ΠΈ cdspell
Π·Π°ΡΡΠ΅Π΄ΡΠ²Π° Π²ΡΠ΅ΠΌΠ΅, Π±ΡΠΊΠ²Π°Π»Π½ΠΎ ΡΠ΅ΠΊΠΎΡ Π΄Π΅Π½.
2. Π°Π²ΡΠΎΠΊΠ΄
ΠΠΊΠΎ Π½Π΅ ΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ Π΄Π° ΡΠ° ΠΏΡΠΈΡΠ°ΡΠΈΡΠ΅ Π½Π΅Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎΡΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΠΊΡΠ°ΡΠ½ΠΈ Π·Π°ΠΏΠΈΡΠΈ cd
, ΡΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°Π° ΠΎΠΏΡΠΈΡΠ° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈ Π²ΠΎ ΠΏΠ°ΠΏΠΊΠ°ΡΠ° X Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° X Π½Π΅ ΠΏΠΎΡΡΠΎΠΈ.
$ shopt -s autocd
$ abcdefg
$ cd ..
ΠΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° ΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠΈΡΠ°ΡΠ΅, ΠΎΠ²Π° Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π±ΡΠ·ΠΎ Π΄Π° ΡΠΊΠΎΠΊΠ°ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ ΠΏΠ°ΠΏΠΊΠΈΡΠ΅:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Π‘Π°ΠΌΠΎ Π½Π΅ ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΡΠ΅ ΡΠ° ΠΏΠ°ΠΏΠΊΠ°ΡΠ° rm -rf *
(Π΄Π°, ΠΏΠ°ΡΠ΅ΠΌ, ΠΎΠ²Π° Π΅ ΠΌΠΎΠΆΠ½ΠΎ).
3.Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΡΠ²Π°ΡΠ΅
ΠΠ²Π° Π΅ ΠΎΠ΄Π»ΠΈΡΠ½Π° ΠΎΠΏΡΠΈΡΠ° ΠΊΠΎΡΠ° Π³ΠΈ ΠΏΡΠΎΡΠΈΡΡΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° ΡΠΎ ΠΏΡΠΈΡΠΈΡΠΊΠ°ΡΠ΅ Π½Π° 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. ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΠ°Π±ΠΎΡΠΈ
ΠΠ²Π°Π° ΠΎΠΏΡΠΈΡΠ° ΠΏΡΠ΅ΡΡΠ°Π½ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΎΠ΄ΡΠ°Π²ΡΠ²Π° ΠΎΠ΄ ΡΠ΅ΡΠΈΡΠ°ΡΠ° Π°ΠΊΠΎ ΡΓ¨ ΡΡΡΠ΅ ΠΈΠΌΠ° ΡΠ°Π±ΠΎΡΠΈ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π²ΠΎ Π·Π°Π΄Π½ΠΈΠ½Π°.
ΠΠ°ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅ΡΠ΅, ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° ΡΠΏΠΈΡΠΎΠΊ ΡΠΎ Π½Π΅Π·Π°Π²ΡΡΠ΅Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ. ΠΠΊΠΎ ΡΓ¨ ΡΡΡΠ΅ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅ΡΠ΅, ΡΠΎΠ³Π°Ρ Π²Π½Π΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ 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.extglob
ΠΠ²Π°Π° ΠΎΠΏΡΠΈΡΠ° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΈ ΠΏΠΎΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°Π°Ρ ΡΠΎ ΡΠ΅Π³ΡΠ»Π°ΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ. ΠΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΊΠΎΡΠΈΡΠ½ΠΎ:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
ΠΠ²Π΄Π΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ ΡΠ΅ ΡΡΠ°Π²Π°Π°Ρ Π²ΠΎ Π·Π°Π³ΡΠ°Π΄ΠΈ ΠΈ ΡΠ΅ ΠΎΠ΄Π΄Π΅Π»ΡΠ²Π°Π°Ρ ΡΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»Π½Π° Π»Π΅Π½ΡΠ°. ΠΠ²Π΅ Π³ΠΈ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ:
? = ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Π½ΡΠ»Π° ΠΈΠ»ΠΈ Π΅Π΄Π½Π° ΠΏΠΎΡΠ°Π²Π° Π½Π° Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΡΠΈ ! = ΠΏΡΠΈΠΊΠ°ΠΆΠΈ ΡΠ΅ ΡΡΠΎ Π½Π΅ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΡΠΈ * = Π½ΡΠ»Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ + = Π΅Π΄Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ @ = ΡΠΎΡΠ½ΠΎ Π΅Π΄Π½Π° ΠΏΠΎΡΠ°Π²Π°
ΠΠ°ΡΡΠΈΡΠ° ΠΎΠ΄ Π½Π΅ΡΡΠ΅ΡΠΈ
7. histverify
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΌΠ°Π»ΠΊΡ ΡΡΡΠ°ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π·Π° Π±ΡΠ·ΠΎ ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ ΠΎΠ΄ ΠΈΡΡΠΎΡΠΈΡΠ°ΡΠ° Π½Π° ΠΊΡΠ°ΡΠ΅Π½ΠΊΠΈΡΠ΅ !!
ΠΈ !$
.
ΠΠΏΡΠΈΡΠ° 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