在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)给出的答案