我想拆分stdout
以便将其同时打印到stdout
和stderr
。这听起来像是一份工作,tee
但语法却在逃避我——
./script.sh | tee stderr
当然,stderr
这里究竟应该怎么称呼呢?
我发现在交互式和非交互式 shell 中都适用的唯一跨平台方法是:
command | tee >(cat 1>&2)
tee 的参数是文件或文件句柄。使用进程替换,我们将输出发送到进程。在过程 =cat= 中,我们将 stdout 重定向到 stderr。shell (bash/ksh) 负责设置 1 和 2 文件描述符。
./script.sh | tee /dev/fd/2
请注意,这取决于操作系统支持,而不是 tee 中的任何内置功能,因此不是通用的(但可以在 MacOS、Linux、Solaris、FreeBSD 等其他平台上运行)。
./script.sh 2>&1 >/dev/null | tee stderr.out
这会将 STDERR 打开到 STDOUT,然后处理 STDOUT。