🐧 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ΄Ρ‹ Π²Ρ‹Ρ…ΠΎΠ΄Π° Bash Π² Linux

by itisgood

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ экзит ΠΊΠΎΠ΄Ρ‹

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ скрипт, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $?.

ΠšΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ числовыми ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ 0 Π΄ΠΎ 255, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 8-разрядноС Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ°.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1, ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ 255.

КаТдоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, с сообщСниСм ΠΎΠ± ошибкС ΠΈΠ»ΠΈ Π±Π΅Π· Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний.

НапримСр:

$ date ; echo $?
Sat Jan 18 08:06:07 IST 2020
0
Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° Ρ€Π°Π²Π΅Π½ 0, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ это:
$ wrngcmd ; echo $?
-bash: wrngcmd: command not found
127
Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ просто Π½Π°Π±Ρ€Π°Π»ΠΈ Π±Π΅ΡΡΠΌΡ‹ΡΠ»Π΅Π½Π½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ символов.

Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ экзит ΠΊΠΎΠ΄Ρ‹ Bash

Подобно ΠΊΠΎΠ΄Ρƒ Π²Ρ‹Ρ…ΠΎΠ΄Π° Β«0Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ успСх ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, bash ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² Π²Ρ‹Ρ…ΠΎΠ΄Π° для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ситуаций.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΈΠ΄Π΅Π°Π»Π΅, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² скриптС ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π°, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эти Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Π²Ρ‹Ρ…ΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ.

Код Π²Ρ‹Ρ…ΠΎΠ΄Π°
Бмысл ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ
1 Catchall для ΠΎΠ±Ρ‰ΠΈΡ… ошибок let β€œvar1 = 1/0”
Π Π°Π·Π½Ρ‹Π΅ ошибки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Β«Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль» ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ нСдопустимыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
2
Π—Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ встроСнными ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌΠΈ
empty_function() {}
ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°
126
Вызванная ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°
/dev/null
ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΡ€Π°Π²Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ являСтся исполняСмым
127 β€œcommand not found” illegal_command ВозмоТная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с $PATH ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΎΠΉ
128 НСвСрный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для Π²Ρ‹Ρ…ΠΎΠ΄Π° exit 3.14159
exit ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлочислСнныС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0 – 255 (см. ΠΏΠ΅Ρ€Π²ΡƒΡŽ сноску)
128 +n
Π‘ΠΈΠ³Π½Π°Π» Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ошибки Β«nΒ»
kill -9 $PPID
$? Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 137 (128 + 9)
130
Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Control-C
Ctrl-C
Control-C – это сигнал 2 Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ошибки (130 = 128 + 2, см. Π’Ρ‹ΡˆΠ΅)
255*
Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· состояния Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°
exit -1
Π²Ρ‹Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлочислСнныС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0 – 255
Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° Β«128 + nΒ» Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.
ЗапуститС бСсконСчный Ρ†ΠΈΠΊΠ», ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
#!/bin/bash    
while true; do    
echo ${$}    
done
Если Π²Ρ‹ запуститС этот скрипт, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ PID Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΡƒΠ±ΡŒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ Β«CTRL + CΒ».
Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Β«CTRL + CΒ» ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π°.
# sh test.sh
....
2582
2582
2582
2582
2582
2582
^C
geeklab$ echo $?
130
Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° – Β«128 + 2Β», Ρ‚. Π΅ 130.
Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, Ссли ΠΌΡ‹ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌ скрипт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Β«kill -9Β», ΠΊΠΎΠ΄ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Β«128 + 9Β», Ρ‚. Π΅. 137.
Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
# sh test.sh
....
2582
2582
2582
...
# kill -9 [pid_of_script]
....
2602
2602
Killed: 9
geeklab$ echo $?
137

You may also like

Leave a Comment