рдХреБрдЫ рдмреИрд╢ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
set -o xtrace
рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП,
set -o errexit
рдЧрд▓рддреА рд╕реЗ рдпрд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП
рд╕реЗрдЯ-рдмреА рдЧрд▓рдд
рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ рдмреБрд▓рд╛рдпрд╛ рдЪрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдХрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИрдВред рдХрднреА-рдХрднреА рд╡реЗ рдордиреБрд╖реНрдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ред
рдиреЛрдЯ: рдореИрдХ рдореЗрдВ рдмреИрд╢ рдХрд╛ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (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
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди
рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рддреЗ рд╣реИрдВред
1. cdspell
рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, bash рдЯрд╛рдЗрдкреЛрд╕ рдХреЛ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЖрдкрдиреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реИред
$ shopt -s cdspell $ mkdir abcdefg $ cd abcdeg abcdefg $ cd ..
рдореИрдВрдиреЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ рд╢рд╛рдпрдж рд╣реА рдХрднреА (рд╢рд╛рдпрдж рд╕рд╛рд▓ рдореЗрдВ рдПрдХ рдмрд╛рд░) рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдиреНрдп рджрд┐рдиреЛрдВ рдореЗрдВ,
cdspell
рд╕рдордп рдмрдЪрд╛рддрд╛ рд╣реИ, рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╣рд░ рджрд┐рдиред
2. рдирд┐рд░рдВрдХреБрд╢
рдпрджрд┐ рдЖрдк рдмрд╛рд░-рдмрд╛рд░
cd
рдЗрдирдкреБрдЯ рдХреА рдЕрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХреНрд╕ рдХрдорд╛рдВрдб рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдПрдХреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
$ shopt -s autocd $ abcdefg $ cd ..
рд╕реНрд╡рдд: рдкреВрд░реНрдг рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЛ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рдХреВрджрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
$ ./abc[TAB][RETURN] cd -- ./abcdefg
рдмрд╕ рдлрд╝реЛрд▓реНрдбрд░
rm -rf *
рди рджреЗрдВ (рд╣рд╛рдВ, рд╡реИрд╕реЗ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ)ред
3. рдбрд╛рдЗрд░реЗрдХреНрд╕рдкрд╛рдВрдб
рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬреЛ рдЯреИрдм рджрдмрд╛рдХрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
$ shopt -s direxpand $ ./[TAB]
рд╕рд╛рдл рдирд┐рдХрд╛рд╕
4. рдЬрд╛рдБрдЪ
рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕рддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдиреМрдХрд░рд┐рдпрд╛рдВ рдЕрднреА рднреА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓ рд░рд╣реА рд╣реИрдВред
рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЕрдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдлрд┐рд░ рд╕реЗ
exit
ред
$ shopt -s checkjobs $ echo $$ 68125
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреНрд╖рдорддрд╛рдУрдВ
5. рдЧреНрд▓реЛрдмрд╕реНрдЯрд╛рд░
рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЛ рдЕрд▓реМрдХрд┐рдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ! рдпрджрд┐ рдЖрдк рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ:
$ shopt -s globstar $ ls **
рдлрд┐рд░ рд╢реЗрд▓ рдЖрд╡рд░реНрддреА рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ред
direxpand
рд╕рдВрдпреЛрдЬрди рдореЗрдВ
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
рдкрд╣рд▓реЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреИрд╢ рдХрдорд╛рдВрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ:
$ shopt -s histverify $ echo !$
8. рдиреЛрдХреНрд▓реЛрдмреНрдмрд░
рдлрд┐рд░ рд╕реЗ, рджреБрд░реНрдШрдЯрдирд╛рдУрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рддреН рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдСрдкрд░реЗрдЯрд░ (
>
) рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИ, рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рд╕реЗред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмреИрдХрдЕрдк рдирд╣реАрдВ рд╣реИ рддреЛ рдпрд╣ рдПрдХ рдЖрдкрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
set -
рд╡рд┐рдХрд▓реНрдк рдРрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯрд┐рдВрдЧ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
>|
:
$ touch afile $ set -C $ echo something > afile -bash: afile: cannot overwrite existing file $ echo something >| afile $