Я видел, что echo
используется во многих местах:
echo >&2 message text ...
Что это значит?
Я понимаю 2>&1
, однако я не уверен, как интерпретировать использование выше.
Может кто-нибудь объяснить?
Я видел, что echo
используется во многих местах:
echo >&2 message text ...
Что это значит?
Я понимаю 2>&1
, однако я не уверен, как интерпретировать использование выше.
Может кто-нибудь объяснить?
Чтобы быстро объяснить, что пропустили остальные:
echo "hey" >&2
>
перенаправить стандартный вывод (неявный 1>
)
&
то, что будет дальше, это файловый дескриптор, а не файл (только для правой стороны >
)
2
Номер дескриптора файла stderr
Перенаправить stdout
из echo
на stderr
. (Если бы вы использовали echo "hey" >2
, вы выводили бы hey
в файл с именем 2
)
Использование >&2
здесь отправляет вывод в стандартную ошибку вместо стандартного. Это, как правило, лучшее место для отправки вывода журнала, который не является фактическим результатом вычисления, особенно если результат печатается в стандартном формате (возможно, перенаправлен на файл), а не на какой-либо другой файл (например, отправка журнала в стандартная ошибка гарантирует, что она не будет включена в реальный вывод, который был перенаправлен на выходной файл).
Перенаправление >&2
является ярлыком для 1>& 2
.
Вы понимаете 2>& 1
, чтобы понять, что это связывает команду stdout с текущим stderr
В то время как другие ответы дают хорошие объяснения, им не хватает точного вопроса, который здесь задают. Лучший ответ - в виде комментария непосредственно к вопросу, но, увы, переполнение стека не считает меня достойным добавления комментариев.
Итак, цитируем тройку:
Преобладающая [sic] позиция перенаправления в командной строке не важна. Все
>&2 echo message
и>&2 echo message
echo >&2 message
иecho message >&2
эквивалентны.
Это именно тот вопрос, который я искал, и ни один из текущих ответов на него не отвечает; они просто объясняют то, что я уже знал. С другой стороны, вопрос мог бы выиграть от лучшей формулировки, но, опять же, мне запрещено комментировать, так что...