Я хотел бы иметь команду воспроизведения, реплицируемую в stderr, а также под bash. Что-то вроде:Дублирование stdout для stderr
$ echo "FooBar" (...)
FooBar
FooBar
$
где (...) - выражение перенаправления. Это возможно?
Я хотел бы иметь команду воспроизведения, реплицируемую в stderr, а также под bash. Что-то вроде:Дублирование stdout для stderr
$ echo "FooBar" (...)
FooBar
FooBar
$
где (...) - выражение перенаправления. Это возможно?
Используйте тройник с/Dev/STDERR:
echo "FooBar" | tee /dev/stderr
или использовать AWK/Perl/Python вручную делать репликацию:
echo "FooBar" | awk '{print;print > "/dev/stderr"}'
echo "FooBar" | perl -pe "print STDERR, $_;"
Для перенаправления на stderr я бы использовал >&2
или >/dev/stderr
. Для тиражирования вывода я бы использовал tee
. Недостатком этого является то, что временный файл необходимо:
echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout
Используйте процесс подстановки: http://tldp.org/LDP/abs/html/process-sub.html
echo "FooBar" | tee >(cat >&2)
Tee берет имя файла как параметр и копирует его в этот файл. С заменой процесса вы можете использовать процесс вместо имени файла >(cat)
, и вы можете перенаправить вывод этого процесса на stderr >(cat >&2)
.
Это хорошее решение для операционных систем, таких как OS X, у которых нет файловой системы/proc. – Meow
echo "FooBar" |tee /dev/stderr
tee: /dev/stderr: Permission denied
не работает с RedHat 6,3
echo "FooBar" | (read A ; echo $A ; echo $A >&2)
работает
извините, объяснение добавлено ;-) – defdefred
Посмотреть [Как я могу послать стандартный вывод в несколько команд?] (Http://unix.stackexchange.com/questions/28503/how-can-i-send-stdout-to-multiple-commands) –