如果我在后台运行命令&
,如下所示:
sleep 2 &
当命令完成时,我得到“完成”。我怎样才能避免看到“完成”消息?
答案1
在子 shell 中运行命令:
(sleep 2 &)
答案2
执行 shell 内置功能:
$ set +m
这可以通过关闭“监控模式”因此 shell 不会报告终止后台作业。
尽管在子 shell 中运行如下命令:
$ (sleep 2&)
...将要还禁用该消息,它起作用的唯一原因是监控模式默认只对交互式 shell 启用。也就是说,子 shell 通过运行具有自动“设置 +m”。
答案3
我想澄清一下之前的两个答案。如果您希望永远不要在 shell 中的任何命令中看到 Done 消息,那么这set +m
就是方法。只需将其放入您的 .profile 和/或 .bashrc 中即可。但请注意,如果您输入以下内容:
set +m
sleep 2 &
set -m
并且在最终结束后睡眠set -m
,您仍然会收到完成消息。
如果您想要禁用单个命令调用的消息,(sleep 2 &)
那么可以使用子shell技术。
老实说,我只知道set +m
,所以 +1 感谢 Wooble 的启发。但是,值得注意的是,您想要这两种解决方案中的哪一种取决于您要做什么。
答案4
无子壳,您可以执行以下操作:
silent_background() {
{ 2>&3 "$@"& } 3>&2 2>-
disown &>/dev/null # Close STD{OUT,ERR} for silence if job has already completed
}
silent_background sleep 5
基于这个答案。