Ответ 1
Чтобы повторить текст как для файла журнала, так и для stderr, но не для stdout, попробуйте следующее:
echo "error" | tee -a log 1>&2
В bash script,
echo "error" 1 > & 2 | tee -a log
будет печатать stderr на экране, но не записывать в файл, как это сделать в одно и то же время?
Чтобы повторить текст как для файла журнала, так и для stderr, но не для stdout, попробуйте следующее:
echo "error" | tee -a log 1>&2
echo "error" 1>&2 | tee -a log
С первой частью 1>&2
вы говорите: "Перенаправить stdout в stderr" . Таким образом, эхо-выход "error"
переходит в stderr.
Труба (|
) читается только с stdout
, а не stderr
. Так что tee
вообще не получает никаких stdin
из канала. Следовательно, он ничего не добавляет к файлу журнала.
Чтобы просмотреть как stdout, так и stderr на консоли и отправить оба потока в журнал, перенаправьте stderr на stdout, как показано ниже:
progam.sh 2>&1 | tee -a log
Но по умолчанию только stdout передается в трубах, так что в
$ echo "error" | tee
tee
видит только stout из echo
, а не stderr. stderr будет отображаться на терминале.