我想拆分stdout
,以便将其打印到stdout
和stderr
。这听起来像是tee
的工作,但语法却在逃避我 -
./script.sh | tee stderr
当然,这里应该如何引用stderr
?
答案 0 :(得分:45)
我找到的唯一可以在交互式和非交互式shell中工作的跨平台方法是:
command | tee >(cat 1>&2)
tee的参数是文件或文件句柄。使用process substitution我们将输出发送到进程。在process = cat =中,我们将stdout重定向到stderr。 shell(bash / ksh)负责设置1和2文件描述符。
答案 1 :(得分:33)
./script.sh | tee /dev/fd/2
请注意,这取决于操作系统支持,而不是tee中的任何内置电源,因此不是通用的(但可以在MacOS,Linux,Solaris,FreeBSD上运行,可能适用于其他)。
答案 2 :(得分:-2)
./script.sh 2>&1 >/dev/null | tee stderr.out
将STDERR打开到STDOUT,然后处理STDOUT。