рд╕рд╛рдд рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд Bash рдЪрд░

рдмрд╛рд░реЗ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рд╛рдЦреНрджреИ рдХрдо рдЬреНрдЮрд╛рдд рдХрд╛рд░реНрдпрд╣рд░реВ bash, рдо рддрдкрд╛рдИрд▓рд╛рдИ рд╕рд╛рдд рдЪрд░ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБ рдЬреБрди рддрдкрд╛рдИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдирд╣реБрди рд╕рдХреНрдЫред

1) PROMPT_COMMAND

рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрд╛рдЙрди рдкреНрд░рдореНрдкреНрдЯрд▓рд╛рдИ рдХрд╕рд░реА рд╣реЗрд░рдлреЗрд░ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рдерд╛рд╣рд╛ рд╣реБрди рд╕рдХреНрдЫ, рддрд░ рд╕рдмреИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫреИрди рдХрд┐ рддрдкрд╛рдЗрдБ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рдкреНрд░рдореНрдкреНрдЯ рджреЗрдЦрд╛рдЙрдБрджрд╛ рд╢реЗрд▓ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╡рд╛рд╕реНрддрд╡рдорд╛, рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рдкреНрд░рдореНрдкреНрдЯ рд╣реЗрд░рдлреЗрд░рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдкреНрд░рдореНрдкреНрдЯрдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдЖрджреЗрд╢рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдпреЛ рдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред

рдпрд╕рд▓рд╛рдИ рдирдпрд╛рдБ рд╢реЗрд▓рдорд╛ рдЪрд▓рд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╕рддреНрд░рдорд╛ рдХреЗ рд╣реБрдиреНрдЫ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

рдпрджрд┐ рддрдкрд╛рдИрдВ рджреМрдбрдиреБрд╣реБрдиреНрдЫ history рдХрдиреНрд╕реЛрд▓рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдЦрд╛рддрд╛ рдЕрдиреНрддрд░реНрдЧрдд рдкрд╣рд┐рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдПрдХрд╛ рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫред

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

рдпреЛ рдЪрд░ рд╕реЗрдЯ рднрдПрдкрдЫрд┐, рдирдпрд╛рдБ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВрд▓реЗ рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рд╕рдордп рд░реЗрдХрд░реНрдб рдЧрд░реНрджрдЫ, рддреНрдпрд╕реИрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

1871 рдореИрд▓реЗ рдпреЛ рджреМрдбреЗрдВ: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рджреМрдбреЗрдВ: 01/05/19 13:38:19 curl bbc.co.uk 1873 рдо рдпреЛ рджреМрдбреЗрдВ : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 рдорд╛ рдпреЛ рджреМрдбреЗрдВ: 01 /05/19 13:39:25 sudo su -

рдмрд╛рдЯ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░рд╣рд░реВ рдврд╛рдБрдЪрд╛ рдорд┐рд▓реНрдЫ man date.

3) CDPATH

рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдорд╛ рд╕рдордп рдмрдЪрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрд▓реЗ рдЖрджреЗрд╢ рдЬрд╛рд░реА рдЧрд░реНрджрд╛ рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдпреЛ рдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╕рд╛рдереИ PATH, рдЪрд░ CDPATH рдкрдерд╣рд░реВрдХреЛ рдХреЛрд▓реЛрди-рд╡рд┐рднрд╛рдЬрд┐рдд рд╕реВрдЪреА рд╣реЛред рдЬрдм рддрдкрд╛рдЗрдБ рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБрд╣реБрдиреНрдЫ cd рд╕рд╛рдкреЗрдХреНрд╖ рдорд╛рд░реНрдЧрдХреЛ рд╕рд╛рде (рдЕрд░реНрдерд╛рддреН рдХреБрдиреИ рдЕрдЧреНрд░рдгреА рд╕реНрд▓реНрдпрд╛рд╢ рдЫреИрди), рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╢реЗрд▓рд▓реЗ рдорд┐рд▓реНрджреЛ рдирд╛рдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрдХреЛ рд╕реНрдерд╛рдиреАрдп рдлреЛрд▓реНрдбрд░рдорд╛ рджреЗрдЦрд┐рдиреНрдЫред CDPATH рддрдкрд╛рдИрд▓реЗ рдЬрд╛рди рдЪрд╛рд╣рдиреБ рднрдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрд▓реЗ рджрд┐рдиреБрднрдПрдХреЛ рдорд╛рд░реНрдЧрд╣рд░реВрдорд╛ рдЦреЛрдЬреА рдЧрд░реНрдиреЗрдЫред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ CDPATH рдпреЛ рддрд░рд┐рдХрд╛рдмрд╛рдЯ:

$ CDPATH=/:/lib

рд░ рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

$ cd /home
$ cd tmp

рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдИрдВ рд╕рдзреИрдВ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫ /tmp рддрдкрд╛рдИрдВ рдЬрд╣рд╛рдБ рднрдП рдкрдирд┐ред

рдпрджреНрдпрдкрд┐, рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреБрд╣реЛрд╕реН, рдХрд┐рдирдХрд┐ рдпрджрд┐ рддрдкрд╛рдЗрдБ рд╕реВрдЪреАрдорд╛ рд╕реНрдерд╛рдиреАрдп рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реБрдиреНрди рднрдиреЗ (.) рдлреЛрд▓реНрдбрд░, рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБ рдХреБрдиреИ рдЕрдиреНрдп рдлреЛрд▓реНрдбрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗ рдЫреИрди tmp рд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рдпрд╕рд▓рд╛рдИ рдЬрд╛рдиреБрд╣реЛрд╕реН:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

рдЙрдлреН!

рдпреЛ рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдХреЛ рднреНрд░рдо рдЬрд╕реНрддреИ рд╣реЛ рдЬрдм рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдлреЛрд▓реНрдбрд░ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдЪрд░рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдПрдиред PATH... рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЖрдлреНрдиреЛ PATH рдЪрд░рдорд╛ рдЧрд░реНрдиреБ рдкрд░реНрдЫ рдХрд┐рдирднрдиреЗ рддрдкрд╛рдИрдВ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдХреЛрдбрдмрд╛рдЯ рдирдХреНрдХрд▓реА рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрди рдардЧрд┐рдПрдХреЛ рд╣реБрди рд╕рдХреНрдЫред

рдореЗрд░реЛ рд╕реБрд░реВрд╡рд╛рдд рдмрд┐рдиреНрджреБ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

рдХреЗ рддрдкрд╛рдИрдВрд▓реЗ рдХрд╣рд┐рд▓реНрдпреИ рд╕реЛрдЪреНрдиреБрднрдПрдХреЛ рдЫ, рдЯрд╛рдЗрдк рдЧрд░реНрджреИ exit рдХреЗ рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХреЛ рд╣рд╛рд▓рдХреЛ рдмрд╛рд╕ рд╢реЗрд▓рдмрд╛рдЯ рдЕрд░реНрдХреЛ "рдЕрднрд┐рднрд╛рд╡рдХ" рд╢реЗрд▓рдорд╛ рд▓реИрдЬрд╛рдиреНрдЫ, рд╡рд╛ рдпрд╕рд▓реЗ рдХрдиреНрд╕реЛрд▓ рд╕рдЮреНрдЭреНрдпрд╛рд▓рд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдмрдиреНрдж рдЧрд░реНрдиреЗрдЫ?

рдпреЛ рднреЗрд░рд┐рдПрдмрд▓рд▓реЗ рдмреНрдпрд╛рд╕ рд╢реЗрд▓рдорд╛ рддрдкрд╛рдИрдВ рдХрддрд┐ рдЧрд╣рд┐рд░реЛ рдиреЗрд╕реНрдЯреЗрдб рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗрд░ рдЯреНрд░реНрдпрд╛рдХ рд░рд╛рдЦреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдирдпрд╛рдБ рдЯрд░реНрдорд┐рдирд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдпреЛ 1 рдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ:

$ echo $SHLVL
1

рддреНрдпрд╕рдкрдЫрд┐, рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрд░реНрдХреЛ рд╢реЗрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рд╕рдВрдЦреНрдпрд╛ рдмрдвреНрдЫ:

$ bash
$ echo $SHLVL
2

рдпреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдорд╛ рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рд╣реБрди рд╕рдХреНрдЫ рдЬрд╣рд╛рдБ рддрдкрд╛рдИрдВ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреЗ рд╡рд╛ рдирдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрдиреБрд╣реБрдиреНрди, рд╡рд╛ рддрдкрд╛рдИрдВрд▓реЗ рдиреЗрд╕реНрдЯ рднрдПрдХреЛ рдард╛рдЙрдБрдХреЛ рдЯреНрд░реНрдпрд╛рдХ рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реНред

5) LINENO

рдЪрд░ рд╣рд╛рд▓рдХреЛ рдЕрд╡рд╕реНрдерд╛ рд░ рдбрд┐рдмрдЧрд┐рдЩрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдЙрдкрдпреЛрдЧреА рдЫ LINENO, рдЬрд╕рд▓реЗ рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рд╕рддреНрд░рдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдПрдХрд╛ рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рд╕рдЩреНрдЦреНрдпрд╛ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрдЫ:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

рдпреЛ рдкреНрд░рд╛рдпрдГ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдбрд┐рдмрдЧ рдЧрд░реНрджрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдЬрд╕реНрддреИ рд▓рд╛рдЗрдирд╣рд░реВ рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░реНрджреИ echo DEBUG:$LINENO, рддрдкрд╛рдИрд▓реЗ рддреБрд░реБрдиреНрддреИ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдХрд╣рд╛рдБ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рд╡рд╛ рд╣реЛрдЗрди)ред

6) REPLY

рдпрджрд┐, рдо рдЬрд╕реНрддреИ, рддрдкрд╛рдЗрдБ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдпреЛ рдЬрд╕реНрддреИ рдХреЛрдб рд▓реЗрдЦреНрдиреБрд╣реБрдиреНрдЫ:

$ read input
echo do something with $input

рдпреЛ рдПрдХ рдЕрдЪрдореНрдордХреЛ рд░реВрдкрдорд╛ рдЖрдЙрди рд╕рдХреНрдЫ рдХрд┐ рддрдкрд╛рдИрд▓реЗ рдЪрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдЪрд┐рдиреНрддрд╛ рдЧрд░реНрдиреБрдкрд░реНрджреИрди:

$ read
echo do something with $REPLY

рдпреЛ рдПрдЙрдЯреИ рдХреБрд░рд╛ рдЧрд░реНрдЫред

7) TMOUT

рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рд▓рд╛рдореЛ рд╕рдордпрд╕рдореНрдо рд░рд╣рди рд╡рд╛ рдЧрд▓рдд рдЯрд░реНрдорд┐рдирд▓рдорд╛ рдЧрд▓рдд рд░реВрдкрдорд╛ рдХреЗрд╣реА рдЦрддрд░рдирд╛рдХ рдЪрд▓рд╛рдЙрдирдмрд╛рдЯ рдмрдЪреНрди, рдпреЛ рдЪрд░ рд╕реЗрдЯрд┐рдЩрд▓реЗ рд╕реБрд░рдХреНрд╖рд╛рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫред

рдпрджрд┐ рд╕реЗрдХреЗрдиреНрдбрдХреЛ рд╕реЗрдЯ рд╕рдВрдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрд╣рд┐ рдкрдирд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рднрдиреЗ, рд╢реЗрд▓ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреНрдЫред

рдЕрд░реНрдерд╛рддреН рдпреЛ рд╡рд┐рдХрд▓реНрдк рд╣реЛ sleep 1 && exit:

$ TMOUT=1

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

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