Bash:
Запись в стандартный поток ошибок
Как сделать:
# Перенаправление команды echo в стандартный поток ошибок
echo "Ошибка: Неверный ввод." >&2
# Использование printf для записи в стандартный поток ошибок
printf "Ошибка: Файл не найден.\n" >&2
# Пример скрипта, который записывает как в stdout, так и в stderr
echo "Процесс запущен..."
echo "Ой! Что-то пошло не так." >&2
echo "Процесс завершен."
Пример вывода:
Процесс запущен...
Процесс завершен.
Ой! Что-то пошло не так.
В приведенном примере “Ой! Что-то пошло не так.” отправляется в stderr
и может отображаться не в том порядке, если смешивается со stdout
в терминале, поскольку stderr
обычно не буферизуется.
Подробнее
Bash унаследовал концепцию ‘дескрипторов файлов’ из Unix, со stdout
как fd 1
и stderr
как fd 2
. Перенаправление в &2
отправляет вывод в stderr
. Исторически, это разделение позволяло более легко управлять и фильтровать вывод, при этом 2>&1
является общим шаблоном для перенаправления stderr
в stdout
. Жизнеспособной альтернативой явной переадресации является использование logger
для интеграции с syslog или настройка скрипта для внутренней обработки ошибок.
Смотрите также
- Шпаргалка по перенаправлениям в Bash: https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections
- Подробный обзор скриптования в Bash: https://www.tldp.org/LDP/Bash-Beginners-Guide/html/
- Руководство по продвинутому скриптованию в Bash: https://www.tldp.org/LDP/abs/html/