Π‘Π΅Π΄Π΅ΠΌ Π½Π΅ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΈ Bash ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΉΠΊΠΈ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π°Ρ‚Π° ΠΎΡ‚ Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π·Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ извСстни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ bash, Ρ‰Π΅ Ρ‚ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° сСдСм ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅ знаСш.

1) PROMPT_COMMAND

МоТС Π±ΠΈ Π²Π΅Ρ‡Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ°Π½Π°Ρ‚Π°, Π·Π° Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° ΠΏΠΎΠ»Π΅Π·Π½Π° информация, Π½ΠΎ Π½Π΅ всСки Π·Π½Π°Π΅, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° shell всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ°Π½Π°Ρ‚Π°.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ слоТни ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΏΠΎΠ΄ΠΊΠ°Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, Π·Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° информация, която сС ΠΏΠΎΠΊΠ°Π·Π²Π° Π² ΠΏΠΎΠ΄ΠΊΠ°Π½Π°Ρ‚Π°.

ΠžΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° стартиратС Ρ‚ΠΎΠ²Π° Π² Π½ΠΎΠ²Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΈ Π²ΠΈΠΆΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ сС случи със сСсията:

$ 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 Ρ‰Π΅ Π²ΠΈ ΠΎΡ‚Π²Π΅Π΄Π΅ Π»ΠΈ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Π²ΠΈ bash ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° към Π΄Ρ€ΡƒΠ³Π° "родитСлска" ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΈΠ»ΠΈ просто Ρ‰Π΅ Π·Π°Ρ‚Π²ΠΎΡ€ΠΈ напълно ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†Π° Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°?

Π’Π°Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° слСди ΠΊΠΎΠ»ΠΊΠΎ дълбоко стС Π²Π»ΠΎΠΆΠ΅Π½ΠΈ Π² bash shell. Ако ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π½ΠΎΠ² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Ρ‚ΠΎΠΉ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€