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

Дублирование stdout для stderr

Мне бы хотелось, чтобы команда stdout была реплицирована в stderr, а также в bash. Что-то вроде:

$ echo "FooBar" (...)
FooBar
FooBar
$

где (...) - это выражение перенаправления. Возможно ли это?

4b9b3361

Ответ 1

Используйте tee с /dev/stderr:

echo "FooBar" | tee /dev/stderr

или используйте awk/perl/python для ручного выполнения репликации:

echo "FooBar" | awk '{print;print > "/dev/stderr"}'

echo "FooBar" | perl -pe "print STDERR, $_;"

Ответ 2

Использовать замену процесса: http://tldp.org/LDP/abs/html/process-sub.html

echo "FooBar" | tee >(cat >&2)

Tee берет имя файла как параметр и дублирует вывод в этот файл. При замене процесса вы можете использовать процесс вместо имени файла >(cat), и вы можете перенаправить вывод этого процесса на stderr >(cat >&2).

Ответ 3

Для перенаправления на stderr я бы использовал >&2 или >/dev/stderr. Для тиражирования вывода я использовал бы tee. Недостатком этого является то, что необходим временный файл:

echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout