繁体   English   中英

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

[英]How can I capture STDERR into bash variable and not affect STDOUT?

我试图从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变量中?

$( )构造总是捕获标准输出,但是您可以在文件描述符之间进行切换。 只需在{ }对管道进行分组,然后使用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。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM