Ответ 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, $_;"
Мне бы хотелось, чтобы команда stdout была реплицирована в stderr, а также в bash. Что-то вроде:
$ echo "FooBar" (...)
FooBar
FooBar
$
где (...) - это выражение перенаправления. Возможно ли это?
Используйте tee с /dev/stderr:
echo "FooBar" | tee /dev/stderr
или используйте awk/perl/python для ручного выполнения репликации:
echo "FooBar" | awk '{print;print > "/dev/stderr"}'
echo "FooBar" | perl -pe "print STDERR, $_;"
Использовать замену процесса: http://tldp.org/LDP/abs/html/process-sub.html
echo "FooBar" | tee >(cat >&2)
Tee берет имя файла как параметр и дублирует вывод в этот файл. При замене процесса вы можете использовать процесс вместо имени файла >(cat)
, и вы можете перенаправить вывод этого процесса на stderr >(cat >&2)
.
Для перенаправления на stderr я бы использовал >&2
или >/dev/stderr
. Для тиражирования вывода я использовал бы tee
. Недостатком этого является то, что необходим временный файл:
echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout