57

我想拆分stdout以便将其同时打印到stdoutstderr。这听起来像是一份工作,tee但语法却在逃避我——

./script.sh | tee stderr

当然,stderr这里究竟应该怎么称呼呢?

4

3 回答 3

70

我发现在交互式和非交互式 shell 中都适用的唯一跨平台方法是:

command | tee >(cat 1>&2)

tee 的参数是文件或文件句柄。使用进程替换,我们将输出发送到进程。在过程 =cat= 中,我们将 stdout 重定向到 stderr。shell (bash/ksh) 负责设置 1 和 2 文件描述符。

于 2013-12-12T20:51:28.517 回答
52
./script.sh | tee /dev/fd/2

请注意,这取决于操作系统支持,而不是 tee 中的任何内置功能,因此不是通用的(但可以在 MacOS、Linux、Solaris、FreeBSD 等其他平台上运行)。

于 2012-12-10T16:32:53.327 回答
-4
./script.sh 2>&1 >/dev/null | tee stderr.out

这会将 STDERR 打开到 STDOUT,然后处理 STDOUT。

于 2012-12-10T17:56:46.590 回答