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