4

我确定我遗漏了一些简单的东西,但是我正在使用执行脚本来调用一些实用程序脚本,并且我想通过一个管道处理实用程序的所有输出。我的问题是实用程序使用 stderr 来报告错误情况,但我无法捕获它以在父脚本中使用。

父脚本:

#!/bin/bash
child 2>&1 >/dev/null

子脚本

#!/bin/bash
echo "Print"
echo "Error" 1>&2

我期望的是stderrof child(以及它的所有命令)被重定向到stdout(因此没有输出),但是当我执行时,parent我会Error回显到终端(“打印”被发送到 /dev/null)。

4

1 回答 1

7

发生的事情是您将 stderr 重定向到 stdout 的文件句柄(可能是 /dev/stdout)。然后将标准输出重定向到 /dev/null。但是,stderr 仍然指向 /dev/stdout。

要忽略所有输出,首先重定向标准输出,然后将标准错误重定向到标准输出

child >/dev/null 2>&1

或者,更简单地说,因为您专门使用 bash,所以将 stdout 和 stderr 一起重定向:

child &>/dev/null
于 2013-10-24T17:40:16.510 回答