【问题标题】:bash "&" without printing "[1]+ Done "bash "&" 不打印 "[1]+ Done "
【发布时间】:2012-05-13 10:51:57
【问题描述】:

我在我的 .bashrc 中调用一个脚本来打印我打开终端时收到的新消息的数量,我希望调用是非阻塞的,因为它访问网络并且有时需要几秒钟,这意味着我不能使用终端直到完成。

但是,如果我输入:

    mailcheck & 

在我的 bashrc 中,它工作正常。但是然后打印一个空行,当我按下回车键并打印

    [1]+  Done                    ~/bin/mailcheck

这很混乱,有办法解决这个问题吗?

【问题讨论】:

    标签: linux bash scripting


    【解决方案1】:

    尝试将 stderr 传送到 /dev/null

    mailcheck & 2>/dev/null
    

    考虑几分钟,另一种方法可能是使用 write。
    将后台任务的输出通过管道传输给您自己,这样它就可以随时完成,并且您可以对来自 stdout 和 stderr 的任何额外输出进行 bin 处理。

    mailcheck | write $(whoami) & > /dev/null
    

    【讨论】:

    • 不抱歉应该说我试过了,它似乎不是标准错误
    • 不应该是标准错误,因为它不是错误。由于它在后台运行,它只是让您知道该过程已成功完成。也许标准输出?
    • 那也不好,我看不懂,如果不是stdout或者stderr是什么?
    • hmm...输出不是来自脚本本身,所以它不会是标准输出。好吧,我不确定,但是既然您以另一种方式找到了答案,那就太好了! :)
    • 实际上你仍然需要按回车,因为它挂在一个空行上,有没有办法解决这个问题?
    【解决方案2】:

    你可以这样调用你的脚本:

    (exec mailcheck & )
    

    【讨论】:

    • 我得到的仍然不好:[1]+ Done exec ~/bin/mailcheck
    • 它在我的测试中运行良好。当我在 .bashrc 中包含脚本调用时,下次登录时没有收到任何 Done 消息。
    • @anubhava:我可以在我的 Bashrc 中使用此技术来获取给定目录中的所有脚本,如下所示:List=(~/bin/Completion*); for File in "${List[@]}"; do (exec . "$File" &) done 但我收到此错误:bash: exec: .: cannot execute: Is a directory
    【解决方案3】:

    这似乎有效:

    (mailcheck &)
    

    【讨论】:

      【解决方案4】:

      该消息不是来自 mailcheck,而是来自 bash 的工作控制,告诉您有关您的后台工作。避免它的方法是告诉 bash 你不希望它被作业控制管理:

      mailcheck &
      disown $!
      

      【讨论】:

      • 为什么不只是mailcheck & disown
      【解决方案5】:

      这是我在解决我遇到的问题之前检查的最后一页,所以我想我会留下与 OP 有相同问题的完成脚本:

      nohup bash -c '{anycommand};echo "CommandFinished"' 1> "output$(date +"%Y%m%d%H%M").out" 2> /dev/null & disown
      

      这将运行{anycommand}nohup,并将stdout 发送到唯一文件,将stderr 发送到/dev/null,其余发送到控制台(PID)以进行抓取。 stdout 文件由另一个进程监视,该进程正在寻找 CommandFinished 或任何唯一字符串。

      Bash 稍后会打印:

      [1]+  Done                    nohup bash -c ....
      

      在末尾添加 disown 会阻止 bash 作业将其打印到控制台。

      【讨论】:

        猜你喜欢
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 2021-08-21
        相关资源
        最近更新 更多