如何将STDERR捕获到bash变量中而不影响STDOUT?

时间:2018-01-10 04:14:04

标签: bash pg-dump

我正在尝试从pg_dump捕获错误,但无法弄清楚如何将其转换为bash变量。这不起作用,因为STDOUT将要gzip。

OUTPUT=$(/bin/pg_dump -c --if-exists --dbname=cfMaster -U cfMaster | /bin/gzip > ~cftvdun/dbbackups/cfMaster.tmp.sql.gz)

在这种情况下如何将STDERR变为bash变量?

1 个答案:

答案 0 :(得分:1)

$( )构造始终捕获stdout,但您可以在文件描述符之间进行操作。只需将管道分组到{ },然后使用2>&1将组的stderr重定向到标准输出:

output=$( { /bin/pg_dump -c --if-exists --dbname=cfMaster -U cfMaster | /bin/gzip > ~cftvdun/dbbackups/cfMaster.tmp.sql.gz; } 2>&1 )

如果您还想要标准输出(而不仅仅是将其发送到文件),它会变得更复杂。我认为在这种情况下你必须通过FD#3来解决。

顺便说一下,我还建议使用小写(或混合大小写)变量名,以避免与shell或其他实用程序具有特殊含义的变量发生意外冲突。