我有一个简单的脚本,用于启动另一个程序。这个其他程序有时会产生SIGSEGV
,这会中断我的输出。因此,我添加了几行,这些行应该暂时将stderr
重定向到/dev/null
,以便忽略SIGSEGV
。以下是我的代码草稿:
exec 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>1
问题是最后一行没有按我的意愿行事。第一行显然有效,并重定向stderr
。最后一行应该将stderr
返回到之前的位置(我只假设它与stdout
相同)。
任何帮助都会得到满足!
答案 0 :(得分: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可以单独重定向。
答案 1 :(得分:0)
为什么不直接重定向它以进行预测运行?
progname > ./tmp/run.txt 2>/dev/null && run_status='OK'
或者可能
{
progname > ./tmp/run.txt && run_status='OK'
} 2>/dev/null