![如何防止后台作业告诉我它们已经完成](https://linux22.com/image/1301441/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E5%90%8E%E5%8F%B0%E4%BD%9C%E4%B8%9A%E5%91%8A%E8%AF%89%E6%88%91%E5%AE%83%E4%BB%AC%E5%B7%B2%E7%BB%8F%E5%AE%8C%E6%88%90.png)
在 RVM(Ruby 版本管理器)中,您可以.rvmrc
为每个项目创建文件。它处理基本的 ruby 版本和库(gem)管理。当您cd
进入目录时,此脚本会自动执行。但是,它只不过是一个 Bash 脚本。脚本中有一个特定部分,如下所示:
(
if ! command -v bundle ; then
gem install bundler --no-rdoc --no-ri
fi
bundle | grep -v 'Using' | grep -v 'complete' | sed '/^$/d'
) &
由于每次cd
进入目录时都会执行此操作,所以如果我不是每次都收到以下内容那就太好了:
[1]+ Done ( if ! command -v bundle; then
gem install bundler --no-rdoc --no-ri;
fi; bundle | grep --color=auto -v 'Using' | grep --color=auto -v 'complete' | sed '/^$/d' )
有什么方法可以在后台运行这些命令吗?不是完成时收到通知。或者至少以不那么令人讨厌的方式通知,例如消息可能如下:
[1]+ Bundler is done! :-)
谢谢!
答案1
尝试使用disown
,例如:
sleep 1 & disown
从man bash
:
disown [-ar] [-h] [jobspec ...]
如果没有选项,则每个 jobspec 都会从活动作业表中删除。如果没有 jobspec,并且没有提供 -a 或 -r,则使用 shell 的当前作业概念。如果给出了 -h 选项,则不会从表中删除每个 jobspec,但会对其进行标记,以便 shell 收到 SIGHUP 时不会向该作业发送 SIGHUP。如果没有 jobspec,并且没有提供 -a 或 -r 选项,则使用当前作业。如果没有提供 jobspec,则 -a 选项表示删除或标记所有作业;没有 jobspec 参数的 -r 选项将操作限制为正在运行的作业。除非 jobspec 未指定有效作业,否则返回值为 0。
答案2
您可以将全部输出重定向到日志文件或 /dev/null。只需将最后一行从
) &
到
) 2>&1 >>/var/log/rvm-log &