15

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

但是,如果我输入:

    mailcheck & 

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

    [1]+  Done                    ~/bin/mailcheck

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

4

5 回答 5

12

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

mailcheck &
disown $!
于 2012-05-03T21:52:34.197 回答
8

这似乎有效:

(mailcheck &)
于 2012-05-03T21:48:35.323 回答
4

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

(exec mailcheck & )
于 2012-05-03T21:40:34.080 回答
2

尝试将 stderr 管道传输到 /dev/null

mailcheck & 2>/dev/null

想了几分钟,另一种方法可能是使用 write。
将后台任务的输出通过管道传输给自己,这样它就可以随时完成,并且您可以将来自 stdout 和 stderr 的任何附加输出分箱。

mailcheck | write $(whoami) & > /dev/null
于 2012-05-03T21:38:48.170 回答
0

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

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

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

Bash 稍后会打印:

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

添加disown到最后停止 bash 作业将其打印到控制台。

于 2021-09-17T19:29:39.390 回答