将stdout复制到stderr

Cri*_*ris 26 bash redirect

我想把命令的stdout复制到stderr以及bash下.就像是:

$ echo "FooBar" (...)
FooBar
FooBar
$
Run Code Online (Sandbox Code Playgroud)

其中(...)是重定向表达式.那可能吗?

mar*_*rco 47

与/ dev/stderr一起使用tee:

echo "FooBar" | tee /dev/stderr
Run Code Online (Sandbox Code Playgroud)

或使用awk/perl/python手动执行复制:

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

echo "FooBar" | perl -pe "print STDERR, $_;"
Run Code Online (Sandbox Code Playgroud)

  • 哪一种操作系统和外壳之间的移植性更高?tee / dev / stderr`或tee>(cat>&2)`吗? (2认同)
  • 我敢打赌后者是跨平台兼容的,因为在每个发行版中都无法使用`/ dev / stderr`。 (2认同)

bra*_*blc 18

使用流程替换:http://tldp.org/LDP/abs/html/process-sub.html

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

Tee将文件名作为参数并将输出复制到此文件.使用进程替换,您可以使用进程而不是文件名,>(cat)并且可以将此进程的输出重定向到stderr >(cat >&2).

  • 在许多操作系统上,您甚至可能不需要使用“cat”。(即 `echo "FooBar" | tee >(>&2)`) (2认同)