Команда
hostname --fqdn (or -f)
мог бы также сделать то, что Вы хотите или не с тех пор в моей системе, которую я получаю (none)
когда я работаю domainname
Когда я пишу сценарии оболочки сам, мне часто трудно решить то, что производит и который обменивается сообщениями, я должен представить на stderr, или если я должен обеспокоиться вообще.
Молчание - золото. Ничего не произведите, если все прекрасно.
Я хотел бы знать о хорошей практике: Когда перенаправляет некоторое сообщение к stderr, требовавшемуся и разумному, и если не?
Самый легкий способ разделить stderr от stdout: просто предположите, что весь Ваш вывод сценариев будет перенаправлен к другой команде через канал. В этом случае необходимо сохранить все уведомления в stderr, неожиданная информация как таковая в stdout может повредить последовательность канала.
Также иногда в каналах как этот:
command1 | while read line ; do command2 ; done | command3
Вы должны передать что-то от command2
к пользовательскому выводу. Самым легким путем без временных файлов является stderr.
Я обычно пишу все, что касается работы приложения к stderr
, stdout
резервируется для данных.
Вообразите приложение как cat
. При использовании его, чтобы считать вход и передать его другому приложению (через канал), Вы не хотите, чтобы вывод был замусорен сообщениями о состоянии.
Все, что могло бы быть интересно другому приложению или постпроцессору к моему приложению, идет в stdout
, все, что только касается стажера моего приложения, идет в stderr
.
Мое персональное предпочтение состоит в том, чтобы отправить сообщения об ошибках и исключения к stderr
и информационные сообщения к stdout
. IMO, stderr
для любых исключений и следовательно, моя конвенция.
echo
некоторые переменные, покажите то, что было сделано, покажите прогресс). Я смущаюсь помещать все на stderr, так как эти сообщения входа являются всем сценарием, будет когда-либо производить. Я не уверен, как применить идею канала в этих ситуациях. – glts 13.06.2013, 22:25