在bash中杀死后如何抑制终止消息?
时间:2020-03-05 18:58:25 来源:igfitidea点击:
我们如何抑制杀死某个主机后出现的"已终止"消息?
在bash脚本中处理?
我尝试了set + bm
,但这是行不通的。
我知道另一个解决方案涉及调用exec 2> / dev / null
,但这是
可靠的?我该如何重设它以便继续看到stderr?
解决方案
回答
也许通过调用disown
将进程与当前的shell进程分离?
回答
简短的答案是我们不能这样做。 Bash始终打印前台作业的状态。监视标志仅适用于后台作业,并且仅适用于交互式外壳程序,不适用于脚本。
请参阅Jobs.c中的notify_of_job_status()。
如我们所说,我们可以重定向以便标准错误指向/ dev / null,但是我们会错过任何其他错误消息。我们可以通过在运行脚本的子外壳中进行重定向来使其成为临时的。这使原始环境独自存在。
(script 2> /dev/null)
这将丢失所有错误消息,但只会丢失该脚本发出的错误消息,而不会丢失该Shell中运行的任何其他消息。
我们可以通过重定向新的filedescriptor指向该位置来保存和恢复标准错误:
exec 3>&2 # 3 is now a copy of 2 exec 2> /dev/null # 2 now points to /dev/null script # run script with redirected stderr exec 2>&3 # restore stderr to saved exec 3>&- # close saved version
但是我不建议这样做-从第一个开始的唯一好处就是,它节省了子Shell调用,同时更为复杂,并且如果脚本更改了文件描述符,它甚至可以更改脚本的行为。
编辑:
有关更适当的答案,请检查马克·埃德加(Mark Edgar)给出的答案