我在我的 .bashrc 中调用一个脚本来打印我打开终端时收到的新消息的数量,我希望调用是非阻塞的,因为它访问网络并且有时需要几秒钟,这意味着我无法使用终端直到完成。
但是,如果我输入:
mailcheck &
在我的 bashrc 中,它工作正常。但是然后打印一个空行,当我按下回车键并打印
[1]+ Done ~/bin/mailcheck
这很混乱有没有办法解决这个问题?
该消息不是来自 mailcheck,而是来自 bash 的工作控制,告诉您有关您的后台工作。避免它的方法是告诉 bash 你不希望它由作业控制管理:
mailcheck &
disown $!
这似乎有效:
(mailcheck &)
你可以这样调用你的脚本:
(exec mailcheck & )
尝试将 stderr 管道传输到 /dev/null
mailcheck & 2>/dev/null
想了几分钟,另一种方法可能是使用 write。
将后台任务的输出通过管道传输给自己,这样它就可以随时完成,并且您可以将来自 stdout 和 stderr 的任何附加输出分箱。
mailcheck | write $(whoami) & > /dev/null
这是我在解决我遇到的问题之前检查的最后一页,所以我想我会留下与 OP 有相同问题的完成脚本:
nohup bash -c '{anycommand};echo "CommandFinished"' 1> "output$(date +"%Y%m%d%H%M").out" 2> /dev/null & disown
这运行{anycommand}
并将nohup
发送stdout
到唯一文件,stderr
to /dev/null
,其余发送到控制台(PID)以进行抓取。该stdout
文件由另一个寻找该CommandFinished
或任何唯一字符串的进程监视。
Bash 稍后会打印:
[1]+ Done nohup bash -c ....
添加disown
到最后停止 bash 作业将其打印到控制台。