我想执行一个shell脚本,并将stderr传递给第二个脚本。如何在shell2.sh中从shell1.sh访问stderr并读取数据以找到其中的一些文本?
sh shell1.sh | sh shell2.sh
答案 0 :(得分:2)
在将其汇总到您的其他程序之前,只需将stderr
重定向到stdout
(使用2>&1
):
sh shell1.sh 2>&1 | sh shell2.sh
无论通过stdout
进入管道的是什么,都会通过stdin
退出管道,这样您的其他程序就会看到原来的stdout
和stderr
stdin
。
如果您对第一个程序的(原始)stdout
不感兴趣,只需将其重定向到/dev/null
sh shell1.sh 2>&1 >/dev/null | sh shell2.sh
请注意,程序只有一个输入渠道(stdin
),因此,一旦您将stderr
重定向到stdout
,就无法区分原始stdout
<1}}和stderr
在你的管道计划中。
答案 1 :(得分:1)
您可以使用这种方式仅将stderr 传递给RHS命令而忽略stdout:
sh shell1.sh 2>&1 >/dev/null | shell2.sh
2>&1
将stderr
重定向到stdout
,>/dev/null
将stdout重定向到null
。