防止 bash 在后台命令完成执行时显示“完成”

jua*_*blo 39 bash

如果我在后台运行一个命令&,像这样:

sleep 2 &
Run Code Online (Sandbox Code Playgroud)

命令完成后,我得到“完成”。如何避免看到“完成”消息?

Dig*_*oss 38

执行内置的shell:

$ set +m
Run Code Online (Sandbox Code Playgroud)

这是通过关闭“监控模式”来实现的,因此 shell 不会报告终止后台作业。

尽管在子shell中运行命令,例如:

$ (sleep 2&)
Run Code Online (Sandbox Code Playgroud)

... ...将禁用的消息,它工作的唯一原因是因为监控模式在默认情况下只在交互shell启用。也就是说,子外壳通过运行具有自动“set +m”的额外外壳来避免该消息

  • 应该注意的是,此输出不是由睡眠执行的。它的 bash shell 只是通知您已完成的后台作业。 (4认同)

Woo*_*ble 38

在子shell中运行命令:

(sleep 2 &)
Run Code Online (Sandbox Code Playgroud)


小智 8

我想澄清两个较早的答案。如果您想要的不是在您的 shell 中从任何命令看到 Done 消息,这set +m是要走的路。只需将它放在您的 .profile 和/或 .bashrc 中即可。但是请注意,如果您键入:

set +m
sleep 2 &
set -m
Run Code Online (Sandbox Code Playgroud)

并且 sleep 在 final 之后结束set -m,您仍然会收到 done 消息。

如果您想禁用单个命令调用的消息,则可以使用 subshel​​l 技术(sleep 2 &)

set +m老实说,我只知道,所以 +1 给 Wooble 以启发我。但是,值得注意的是,您想要两种解决方案中的哪一种取决于您要尝试做什么。