1>&1
使用,>&2
和/或可以轻松将 stdout 或 stderr 重定向到相同的输出(文件或 2 个 std 输出之一)>file
。有没有办法将相同的输出发送到 KSH 中的两个 std 输出(如 | tee 文件,但使用 &2 作为文件)?我尝试同时将流发送到 stdout 和 stderr (复制输出,每个通道一个),但不使用临时对象(变量或文件)
我使用临时变量但尽量避免这种情况
Tempo="$(
#all my code with output to stdout and stderr
)"
echo "${Tempo}"
echo "${Tempo}" >&2
提问于堆栈溢出建议在这里提问
答案1
如果你的系统没有/dev/stderr
,你可以使用perl
这种方式:
{
your-code
..
} | perl -pe 'print STDERR'
perl
一次处理一行输入,因此您不会在那里看到部分行。例如,使用如下代码:
printf 'Foo'; sleep 2; printf 'Bar\n'
FooBar
2秒后你才会看到。
另请注意,某些命令在不发送到终端时会缓冲其输出,因此这可能会影响输出的完成方式。
答案2
我不知道是否ksh
有一个功能可以做到这一点。zsh
可以做到(使用该multios
功能)。
但有一种方法tee
:
echo foo | tee /dev/stderr
echo foo | tee /proc/self/fd/2