рдЖрда рдереЛрд░реИ-рдЬреНрдЮрд╛рдд рдмреНрдпрд╛рд╢ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ

рдХреЗрд╣рд┐ Bash рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд░рд╛рдореНрд░рд░реА рдЬреНрдЮрд╛рдд рд░ рдкреНрд░рд╛рдпрдГ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдзреЗрд░реИ рдорд╛рдирд┐рд╕рд╣рд░реВ рд▓рд┐рдкрд┐рдХреЛ рд╕реБрд░реБрдорд╛ рд▓реЗрдЦреНрдЫрдиреН

xtrace рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдбрд┐рдмрдЧрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐,

рд╕реЗрдЯ -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.cdsspell

рдпреЛ рд╕реЗрдЯрд┐рдЩ рд╕рдВрдЧ, bash typos рдмреБрдЭреНрди рд╕реБрд░реБ рд╣реБрдиреЗрдЫ рд░ рдлреЛрд▓реНрдбрд░ рдорд╛ рд▓реИрдЬрд╛рдиреНрдЫ рдЬрд╕рдХреЛ рдирд╛рдо рддрдкрд╛рдИрдВрд▓реЗ рдЧрд▓рдд рд╣рд┐рдЬреНрдЬреЗред

$ 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 рдмрд╛рд╕рд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдЪрд▓реНрдиреБ рдЕрдШрд┐ рдХрдорд╛рдгреНрдбрд▓рд╛рдИ рдХрд╕рд░реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдЫ рднрдиреЗрд░ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рд╣реЗрд░реНрди рджрд┐рдиреНрдЫ:

$ shopt -s histverify
$ echo !$          # <= ╨Я╨╛ ╨╜╨░╨╢╨░╤В╨╕╤О Enter ╨║╨╛╨╝╨░╨╜╨┤╨░ ╨╜╨╡ ╨╖╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П
$ echo histverify  # <= ╨Ю╨╜╨░ ╤Б╨╜╨░╤З╨░╨╗╨░ ╨┤╨╡╨╝╨╛╨╜╤Б╤В╤А╨╕╤А╤Г╨╡╤В╤Б╤П ╨╜╨░ ╤Н╨║╤А╨░╨╜╨╡,
histverify         # <= ╨░ ╨┐╨╛╤В╨╛╨╝ ╨╖╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П 

рео. рдиреЛрдХреНрд▓реЛрдмрд░

рдлреЗрд░рд┐, рджреБрд░реНрдШрдЯрдирд╛рд╣рд░реВрдмрд╛рдЯ рдЬреЛрдЧрд╛рдЙрди, рдЕрд░реНрдерд╛рддреН рд░рд┐рдбрд┐рд░реЗрдХреНрдЯ рдЕрдкрд░реЗрдЯрд░рд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрд╡рд╕реНрдерд┐рдд рдлрд╛рдЗрд▓ рдЕрдзрд┐рд▓реЗрдЦрдирдмрд╛рдЯ (>)ред рдпрджрд┐ рддрдкрд╛рдИрдВрд╕рдБрдЧ рдмреНрдпрд╛рдХрдЕрдк рдЫреИрди рднрдиреЗ рдпреЛ рдкреНрд░рдХреЛрдк рд╣реБрди рд╕рдХреНрдЫред

рд╡рд┐рдХрд▓реНрдк set -╨б рдпрд╕реНрддреЛ рдЕрдзрд┐рд▓реЗрдЦрди рдирд┐рд╖реЗрдз рдЧрд░реНрджрдЫред рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛, рддрдкрд╛рдИрдВ рдЕрдкрд░реЗрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реБрд░рдХреНрд╖рд╛ рдмрд╛рдЗрдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ >|:

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

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди