ΠΡΠΊΠΎΠΈ ΠΎΠΏΡΠΈΠΈ Π½Π° Bash ΡΠ° Π΄ΠΎΠ±ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ ΠΈ ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠ° Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ° ΠΏΠΈΡΠ°Ρ
set -o xtrace
Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ,
set -o errexit
Π·Π° ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΏΡΠΈ Π³ΡΠ΅ΡΠΊΠ° ΠΈΠ»ΠΈ
set -o errunset
Π·Π° ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅, Π°ΠΊΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π΅ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π°.
ΠΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ ΡΠ²ΡΡΠ΄Π΅ ΠΎΠ±ΡΡΠΊΠ²Π°ΡΠΎ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°ΡΠ°, Π·Π°ΡΠΎΠ²Π° ΡΡΠΊ ΡΡΠ±ΡΠ°Ρ
Π½ΡΠΊΠΎΠΈ ΠΎΡ Π½Π°ΠΉ-ΠΏΠΎΠ»Π΅Π·Π½ΠΈΡΠ΅, Ρ ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈΡ.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π½Π° Mac ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎ-ΡΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° 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 (set) ΠΈ -u (unset):
$ 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
Π’ΠΎΠ²Π° Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ½Π° ΠΎΠΏΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Ρ Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ Π½Π° 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 &\n$ exit
ΠΠΌΠ° ΡΠ°Π±ΠΎΡΠ° Π² Ρ
ΠΎΠ΄.
[1]+ Π Π°Π±ΠΎΡΠΈ sleep 999 &\n$ echo $$
68125 # <= ID Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π·Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° ΠΎΡΡΠ°Π²Π° ΡΡΡΠΎΡΠΎ
$ exit
ΠΠΌΠ° ΡΠ°Π±ΠΎΡΠ° Π² Ρ
ΠΎΠ΄.
[1]+ Π Π°Π±ΠΎΡΠΈ sleep 999 &\n$ exit
$ echo $$
$ 59316 # <= ΡΠΎΠ·ΠΈ ΠΏΡΡ ID Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ‘ΡΠΏΠ΅Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΠΌΡΠ½Π°
5. globstar
Π’Π°Π·ΠΈ ΠΎΠΏΡΠΈΡ Π²ΠΈ Π΄Π°Π²Π° ΡΡΠΏΠ΅Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΠΌΡΠ½Π°! ΠΠΊΠΎ Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅:
$ shopt -s globstar
$ ls **ΡΠΎΠ³Π°Π²Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ.
Π ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Ρ direxpand ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΡΠ·ΠΎ Π΄Π° ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΏΠΎ-Π½ΠΈΡΠΊΠΎ Π² ΠΉΠ΅ΡΠ°ΡΡ
ΠΈΡΡΠ°:
$ shopt -s direxpand
$ ls **[TAB][TAB]
ΠΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ 2033 Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ? (y ΠΈΠ»ΠΈ 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. Noclobber
ΠΡΠ½ΠΎΠ²ΠΎ, Π·Π° Π·Π°ΡΠΈΡΠ° ΠΎΡ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡ ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π·Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ (>). Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠ°Π»Π½ΠΎ, Π°ΠΊΠΎ Π½ΡΠΌΠ°ΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅.
ΠΠΏΡΠΈΡ set -C Π·Π°Π±ΡΠ°Π½ΡΠ²Π° ΡΠ°ΠΊΠΎΠ²Π° ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈΡΠ΅ Π·Π°ΡΠΈΡΠ°ΡΠ° Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° >|:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΡΠ°ΠΉΠ»
$ echo something >| afile
$ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
