Стандартная ошибка
Часть раздела Основы путешествия по Terminal на Coddy — урок 41 из 82.
Третий и последний поток данных — это стандартный поток ошибок, сокращённо stderr. Этот поток специально предназначен для сообщений об ошибках и предупреждений, отделяя их от обычного вывода.
Когда команда завершается с ошибкой, сообщение об ошибке выводится в стандартный поток ошибок, а не в стандартный вывод:
ls nonexistent_folderСообщение об ошибке, которое вы видите, приходит через stderr. Это разделение важно, потому что вы можете перенаправлять ошибки независимо от обычного вывода.
Чтобы перенаправить стандартный поток ошибок, используйте 2> вместо >:
ls nonexistent_folder 2> errors.txtЧисло 2 относится к номеру дескриптора файла stderr (stdout — это 1, stderr — это 2). Эта команда захватывает сообщение об ошибке в errors.txt, сохраняя ваш терминал чистым.
Вы можете перенаправить оба потока в разные файлы:
ls existing_folder nonexistent_folder > output.txt 2> errors.txtУспешный вывод направляется в output.txt, а любые ошибки — в errors.txt. Чтобы отправить оба потока в один и тот же файл, используйте 2>&1:
ls existing_folder nonexistent_folder > all_output.txt 2>&1Это перенаправляет stderr туда, куда направляется stdout, объединяя весь вывод в один файл.
Задание
ЛегкоИспользуйте оператор 2> для перенаправления сообщения об ошибке в файл. Выполните эти две команды по порядку:
- Попробуйте вывести список папки с именем
missing_folderс помощьюlsи перенаправьте сообщение об ошибке в файл с именемerrors.txt - Используйте
catдля отображения содержимогоerrors.txt
Подсказка: Формат:
ls foldername 2> filename. Сообщение об ошибке попадает в файл вместо появления на экране. Используйтеcat, чтобы проверить, что оно было захвачено.
Шпаргалка
Поток стандартной ошибки (stderr) используется для сообщений об ошибках и предупреждений, отделяя их от обычного вывода.
Чтобы перенаправить стандартную ошибку, используйте 2>:
ls nonexistent_folder 2> errors.txt2 относится к номеру дескриптора файла stderr (stdout — это 1, stderr — 2).
Вы можете перенаправить как stdout, так и stderr в разные файлы:
ls existing_folder nonexistent_folder > output.txt 2> errors.txtЧтобы отправить оба потока в один файл, используйте 2>&1:
ls existing_folder nonexistent_folder > all_output.txt 2>&1Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Каталоги
Создать каталогСкопировать каталогПереместить и переименовать каталогУдалить каталогИтог - Операции с каталогами7Содержимое файлов
Head и TailПодсчёт словКоманда sortКоманда uniqОсновы grepGrep с флагамиПовторение - Текстовый детектив10Проект анализатора логов
Обзор проектаПросмотр файла лога2Навигация
Вывод текущей рабочей директорииСписок файловСмена директорииАбсолютные и относительные путиДомашняя и корневая директорииИтог - Найди свой путь8Перенаправление
Стандартный выводПерезапись в файлДописывание в файлСтандартный вводСтандартная ошибкаПовторение - Сборщик логов11Права доступа
Понимание прав доступаЧтение прав доступаChmod с числамиChmod с символамиВладение файламиПовторение - Заблокируйте доступ14Проект скрипта резервного копирования
Обзор проектаПолучение пути к источнику3Файлы
Создать файлПрочитать файлСкопировать файлПереместить и переименовать файлУдалить файлПовторение - Операции с файлами6Символы подстановки и шаблоны
Звёздный символ подстановкиВопросительный символ подстановкиСкобочные символы подстановкиКомбинирование символов подстановкиПовторение - выборочные операции9Каналы
Что такое каналЦепочка двух командЦепочка нескольких командКанал с grepИтог - Конвейер данных