TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #558 656
Работа с exit codes: как правильно строить логику ошибок

В Bash каждая команда возвращает код завершения: 1 - успех, ≠0 - ошибка. И вся логика скрипта строится именно на этом.

▪️ Базовый принцип


command
echo $?


Но руками $? почти не используют, есть удобнее способы.

▪️ && - выполняй, если успешно


mkdir dir && cd dir


cd выполнится только если mkdir прошел успешно.

▪️ || - выполняй при ошибке


command || echo "Ошибка"


Полезно для fallback-логики.

▪️ Комбинируем


command && echo "OK" || echo "FAIL"


Но тут есть нюанс:

Если echo "OK" упадет (редко, но возможно), сработает || и ты получишь ложный FAIL.

Поэтому для критичной логики лучше:


if command; then
echo "OK"
else
echo "FAIL"
fi


▪️ set -e - автоматический выход при ошибке


set -e


Теперь скрипт завершится при любой ошибке. Но есть подводные камни:


set -e

grep "foo" file.txt
echo "done"


Если grep ничего не найдёт - exit code = 1 и скрипт завершится. Иногда это нормальное поведение, а не ошибка.

▪️ Правильное использование set -e. Обычно пишут так:


set -euo pipefail


Но при этом явно обрабатывают исключения:


grep "foo" file.txt || true


Или:


if grep -q "foo" file.txt; then
echo "Found"
fi


▪️ pipefail - важно для пайпов


set -o pipefail


Без него:


false | true
echo $? # → 0


С pipefail:


false | true
echo $? # → ошибка



▪️ Общие правила:

&& - для цепочек успеха
|| - для fallback
if - для сложной логики
set -e - осторожно
pipefail - почти всегда включать

BashTex 📱 #bash
  • 👍 6
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →