如何防止后台作业告诉我它们已经完成

如何防止后台作业告诉我它们已经完成

在 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 &

相关内容