Подтвердить что ты не робот

Как наносить на stderr?

Я хочу разделить stdout так, чтобы он печатался как на stdout, так и на stderr. Это звучит как задание для tee, но синтаксис уклоняется от меня -

./script.sh | tee stderr

Конечно, как следует называть stderr здесь?

4b9b3361

Ответ 1

./script.sh | tee /dev/fd/2

Обратите внимание, что это зависит от поддержки ОС, а не от встроенной мощности в тройнике, поэтому не универсальна (но будет работать на MacOS, Linux, Solaris, FreeBSD, возможно, на других).

Ответ 2

Единственный метод кросс-платформы, который я нашел, который работает как в интерактивных, так и в неинтерактивных оболочках:

command | tee >(cat 1>&2)

Аргумент для tee - это дескриптор файла или файла. Используя замену процесса, мы отправляем результат в процесс. В процессе = cat = мы перенаправляем stdout в stderr. Оболочка (bash/ksh) отвечает за настройку дескрипторов файлов 1 и 2.

Ответ 3

./script.sh 2>&1 >/dev/null | tee stderr.out

Это открывает STDERR для STDOUT, а затем удаляет STDOUT.