Когда использовать стандартный поток ошибок в приложении командной строки?

Вы можете использовать мою функцию "cd history" с. http://fex.belwue.de/fstools/bash.html

Она запоминает каждый каталог, в котором вы были, и с помощью "cdh" вы увидите список последних 9 директорий. Просто введите номер и вы вернетесь в в эту директорию.

Пример:

framstag@wupp:/: cdh
1: /usr/local/bin
2: /var
3: /
4: /tmp/135_pana/1280
5: /tmp/135_pana
6: /tmp/weihnachtsfeier
7: /tmp
8: /local/home/framstag
select: 4
framstag@wupp:/tmp/135_pana/1280:

cdh работает с autocd aka "cd без cd": вам не нужно набирать cd или pushd.

9
13.01.2017, 01:18
2 ответа

Да, отображать сообщение на stderr , когда используются неправильные аргументы.И если это также приводит к завершению работы приложения, выйдите с ненулевым статусом выхода.

Вы должны использовать стандартный поток ошибок для диагностических сообщений или для взаимодействия с пользователем. Диагностические сообщения включают сообщения об ошибках, предупреждения и другие сообщения, которые не являются частью вывода утилиты, когда она работает правильно («правильно» означает, что ничего особенного не происходит, например, файлы не найдены или что-то еще).

Многие оболочки (все?) Отображают запросы, то, что вводит пользователь, и меню и т. Д. На stderr , так что перенаправление stdout не помешает вам взаимодействовать с оболочкой в осмысленный способ.

Следующее взято из сообщения в блоге по этой теме:

Это цитата Дуга Макиллроя, изобретателя каналов Unix, объясняющего, как появился stderr . «v6» относится к версии конкретной версии исходной операционной системы Unix, выпущенной в 1975 году.

Все программы помещали диагностику на стандартный вывод. Это всегда вызывало проблемы, когда вывод перенаправлялся в файл, но становился невыносимым, когда вывод отправлялся ничего не подозревающему процессу. Тем не менее, не желая нарушать простоту модели «стандартный ввод-стандартный-вывод», люди терпели такое положение вещей до версии 6. Вскоре после этого Деннис Ричи разрубил гордиев узел, представив стандартный файл ошибок. Этого было недостаточно. С помощью конвейеров диагностика может происходить из любой из нескольких программ, работающих одновременно. Диагностика необходима, чтобы идентифицировать себя.
- Дуг Макиллрой, "Читатель UNIX-исследований: Аннотированные выдержки из Руководства программиста, 1971-1986"

"идентифицировать себя" означает просто сказать: "Эй! Это я говорю! неправильно: [...] ":

$ ls nothere
ls: nothere: No such file or directory

Выполнение этого на stderr предпочтительнее, поскольку в противном случае это могло бы быть прочитано тем, что читало на stdout (но мы не Мы все равно не сделаем это с ls , не так ли?).

18
27.01.2020, 20:05

Из Спецификации POSIX для стандартных потоков:

При запуске программы должны быть предварительно определены три потока, и их не нужно открывать явно: стандартный ввод (для чтения обычного ввода ), стандартный вывод (для записи обычного вывода) и стандартный вывод ошибок (для записи диагностического вывода ).

Другими словами, ошибки, отладочная информация и все, что попадает в диагностическую категорию, попадает в stderr .

См. Соответствующий вопрос для получения дополнительной информации: Отчеты о ходе выполнения / информация журнала относятся к stderr или stdout?

7
27.01.2020, 20:05

Теги

Похожие вопросы