4

我有一个简单的脚本,用于启动另一个程序。这个其他程序有时可能会产生一个SIGSEGV,这会破坏我的输出。因此,我添加了几行应该临时将 重定向stderr到被忽略/dev/null的行。SIGSEGV以下是我的代码草稿:

exec 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>1

问题是最后一行没有做我想要的。第一行显然有效,并将stderr. 最后一行应该返回stderr到它之前的位置(我只认为它与 相同stdout)。

任何帮助将不胜感激!

4

2 回答 2

8

另一种选择是:

exec 3> /dev/stderr 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>&3

甚至

exec 3>&2 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>&3

这样,脚本保留了脚本的 stdout 和 stderr 的分离(即脚本 stdout 和 stderr 可以单独重定向。

于 2009-01-15T15:48:55.893 回答
0

为什么不只为 progname 运行重定向它?

   progname > ./tmp/run.txt 2>/dev/null && run_status='OK'

或者可能

{
   progname > ./tmp/run.txt && run_status='OK'
} 2>/dev/null
于 2009-01-15T15:15:45.633 回答