Я бы хотел, чтобы stdout команды реплицировался на stderr также в bash.Что-то вроде:
$ 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, $_;"
Использовать подстановку процесса: http://tldp.org/LDP/abs/html/process-sub.html
echo "FooBar" | tee >(cat >&2)
Тройник принимает имя файла в качестве параметра и дублирует вывод в этот файл.С заменой процесса вы можете использовать процесс вместо имени файла >(cat) и перенаправить вывод этого процесса в stderr >(cat >&2).
>(cat)
>(cat >&2)
Если я могу развернуть @ ответ defdefred , для нескольких строк я использую
my_commmand | while read line; do echo $line; echo $line >&2; done
Он имеет «преимущество» в том, что не требует / звонит tee и использует встроенные модули.
tee
echo "FooBar" |tee /dev/stderr tee: /dev/stderr: Permission denied
не работает с RedHat 6.3
echo "FooBar" | ( read A ; echo $A ; echo $A >&2)
работает
Для перенаправления на stderr я бы использовал >&2 или >/dev/stderr.Для репликации вывода я бы использовал tee.Недостатком является то, что необходим временный файл:
>&2
>/dev/stderr
echo "FooBar" | tee /tmp/stdout >&2 ; cat /tmp/stdout