根据“ Linux:完全参考第6版”(第44页),您只能使用|&
重定向符号通过管道传输STDERR 。
我已经编写了一个非常简单的脚本来对此进行测试:
#!/bin/bash
echo "Normal Text."
echo "Error Text." >&2
我这样运行此脚本:
./script.sh |& sed 's:^:\t:'
大概只有打印到STDERR的行会缩进。但是,正如我所看到的,它实际上并不能这样工作:
Normal Text.
Error Text.
我在这里做错了什么?
我不知道您的书使用什么文本,但是bash手册很清楚(如果您已经对重定向有所了解):
如果
|&
使用,则命令1的标准错误,除了其标准输出外,还通过管道连接到命令2的标准输入。它是的简写2>&1 |
。将标准错误隐式重定向到标准输出是在命令指定的任何重定向之后执行的。
因此,如果您不想混合标准输出和标准错误,则必须将标准输出重定向到其他位置。请参阅如何grep标准错误流(stderr)?
{ ./script.sh 2>&1 >&3 | sed 's:^:\t:'; } 3>&1
双方的fd 1和3script.sh
以及sed
但是将指向原来的标准输出目的地。如果您想成为一个好公民,则可以关闭那些命令不需要的fd 3:
{ ./script.sh 2>&1 >&3 3>&- | sed 's:^:\t:' 3>&-; } 3>&1
bash
并ksh93
可以将压缩>&3 3>&-
为>&3-
(fd move)。
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다