Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅

🐚 Π£Π»ΡƒΡ‡ΡˆΠ°Π΅ΠΌ диагностику ошибок Π² Bash-скриптах с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 'set -e'

Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ писали Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΈ слоТныС Bash-скрипты, Ρ‚ΠΎ, скорСС всСго, Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π½Π° поиски ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π²Π½Π΅Π·Π°ΠΏΠ½Ρ‹Ρ… сбоСв. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ здСсь часто ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ стандартный инструмСнт Bash β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° set -e, автоматичСски Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скрипта ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ любой ошибки. Однако ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ сообщСния Β«Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊΒ» Π½Π΅ всСгда ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстро ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π² Ρ‡Ρ‘ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»ΠΎ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ Bash Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° Ρ…ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ, которая позволяСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ этот процСсс. πŸ“Œ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ 'set -e'? Команда set -e Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ любой Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипта. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сразу ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Однако Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° скрипт ΠΏΠ°Π΄Π°Π΅Ρ‚, слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка ΠΈ какая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊ Π½Π΅ΠΉ ΠΏΡ€ΠΈΠ²Π΅Π»Π°. πŸ›  ПолСзная Ρ…ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ trap РСшСниС ΠΎΡ‡Π΅Π½ΡŒ простоС ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя элСгантноС β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ trap с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ сигнала ERR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ срабатываСт ΠΈΠΌΠ΅Π½Π½ΠΎ
Π’Ρ‘ΠΌΠ½ΠΎΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Bash с нСоново‑зСлёными строками ΠΊΠΎΠ΄Π° ΠΈ Π²ΡΠΏΡ‹Ρ…Π½ΡƒΠ²ΡˆΠΈΠΌ красным символом ошибки, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ ΡˆΠ΅ΡΡ‚Π΅Ρ€Ρ‘Π½ΠΊΠΎΠΉ, символизируСт автоматичСскоС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ скрипта ΠΏΠΎ set ‑e ΠΈ наглядноС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ сбоС.
Π’Ρ‘ΠΌΠ½ΠΎΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Bash с нСоново‑зСлёными строками ΠΊΠΎΠ΄Π° ΠΈ Π²ΡΠΏΡ‹Ρ…Π½ΡƒΠ²ΡˆΠΈΠΌ красным символом ошибки, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ ΡˆΠ΅ΡΡ‚Π΅Ρ€Ρ‘Π½ΠΊΠΎΠΉ, символизируСт автоматичСскоС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ скрипта ΠΏΠΎ set ‑e ΠΈ наглядноС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ сбоС.

Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ писали Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΈ слоТныС Bash-скрипты, Ρ‚ΠΎ, скорСС всСго, Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π½Π° поиски ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π²Π½Π΅Π·Π°ΠΏΠ½Ρ‹Ρ… сбоСв. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ здСсь часто ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ стандартный инструмСнт Bash β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° set -e, автоматичСски Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скрипта ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ любой ошибки. Однако ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ сообщСния Β«Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊΒ» Π½Π΅ всСгда ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстро ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π² Ρ‡Ρ‘ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»ΠΎ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ Bash Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° Ρ…ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ, которая позволяСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ этот процСсс.

πŸ“Œ Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ 'set -e'?

Команда set -e Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ любой Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипта. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сразу ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Однако Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° скрипт ΠΏΠ°Π΄Π°Π΅Ρ‚, слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка ΠΈ какая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊ Π½Π΅ΠΉ ΠΏΡ€ΠΈΠ²Π΅Π»Π°.

πŸ›  ПолСзная Ρ…ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ trap

РСшСниС ΠΎΡ‡Π΅Π½ΡŒ простоС ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя элСгантноС β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ trap с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ сигнала ERR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ срабатываСт ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ошибки. Выглядит это ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

trap 'echo "🚨 Ошибка! Код Π²Ρ‹Ρ…ΠΎΠ΄Π° $? Π½Π° строкС $LINENO: ΠΊΠΎΠΌΠ°Π½Π΄Π° \"$BASH_COMMAND\""' ERR

Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅?

  • πŸ”’ Код ошибки ($?) β€” позволяСт сразу ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½.
  • πŸ“ НомСр строки ($LINENO) β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ мСсто, Π³Π΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.
  • πŸ“Œ ВСкст ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ($BASH_COMMAND) β€” ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, какая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π·Π²Π°Π»Π° сбой.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, вмСсто бСссмыслСнного падСния скрипта, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сообщСниС Π²Ρ€ΠΎΠ΄Π΅:

🚨 Ошибка! Код Π²Ρ‹Ρ…ΠΎΠ΄Π° 1 Π½Π° строкС 42: ΠΊΠΎΠΌΠ°Π½Π΄Π° "cp file.txt /nonexistent/directory/"

🚧 ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ ERR, Π° Π½Π΅ EXIT?

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ сигнал ERR. Если Π²Ρ‹ вмСсто этого Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сигнал EXIT, Ρ‚ΠΎ Bash выдаст Π½ΠΎΠΌΠ΅Ρ€ строки, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» установлСн ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ (ΠΊΠΎΠΌΠ°Π½Π΄Π° trap), Π° Π½Π΅ строку ошибки, Ρ‡Ρ‚ΠΎ свСдёт Π½Π° Π½Π΅Ρ‚ всю ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ этого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

πŸ“š ВСхничСскиС особСнности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π•ΡΡ‚ΡŒ нСсколько Π²Π°ΠΆΠ½Ρ‹Ρ… нюансов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ:

  • πŸ”Έ Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Bash: Π΄Ρ€ΡƒΠ³ΠΈΠ΅ вСрсии Bourne shell, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Dash (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Ubuntu), OpenBSD ΠΈΠ»ΠΈ FreeBSD sh, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅.
  • πŸ”Έ Π―Π²Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ #!/bin/bash: Π₯отя Fedora ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Bash Π΄Π°ΠΆΠ΅ Π² /bin/sh, ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° это Π½Π΅ стоит. Π›ΡƒΡ‡ΡˆΠ΅ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ скрипта #!/bin/bash.

πŸ’‘ ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ? Π›ΠΈΡ‡Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅

Одна ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ программиста β€” ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³ΠΊΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ. ИспользованиС Ρ‚Π°ΠΊΠΎΠΉ простой конструкции Ρ€Π΅Π·ΠΊΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ качСство ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ сообщСниС с Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ строки ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Ρ€Π°Π³ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ ΠΈΠ»ΠΈ часы Π½Π° поиск ошибки Π²ΡΠ»Π΅ΠΏΡƒΡŽ.

Для мСня эта простая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° стала Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Bash. РСкомСндуСтся всСм, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ чистыС ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ скрипты.

πŸ›Ÿ Π˜Ρ‚ΠΎΠ³

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с trap '... ERR' Π² связкС с set -e, Π²Ρ‹ сущСствСнно ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚Π΅ диагностику ошибок Π² Π²Π°ΡˆΠΈΡ… скриптах. НС ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°ΠΉΡ‚Π΅ этим простым, Π½ΠΎ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ эффСктивным инструмСнтом.

πŸ”— ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎ ссылкС: