Linux bash“&&引用;“不打印”;[1] &x2B;“完成”;

Linux bash“&&引用;“不打印”;[1] &x2B;“完成”;,linux,bash,scripting,Linux,Bash,Scripting,我在.bashrc中调用一个脚本来打印我打开终端时收到的新消息的数量,我希望调用是非阻塞的,因为它访问网络,有时需要几秒钟,这意味着在它完成之前我不能使用终端 不过,如果我提出: mailcheck & 在我的bashrc中,它工作得很好。然后打印一个空行,当我按enter键时,它会打印 [1]+ Done ~/bin/mailcheck 这非常混乱,有办法解决吗?尝试将stderr管道化到/dev/null mailchec

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

不过,如果我提出:

    mailcheck & 
在我的bashrc中,它工作得很好。然后打印一个空行,当我按enter键时,它会打印

    [1]+  Done                    ~/bin/mailcheck

这非常混乱,有办法解决吗?

尝试将stderr管道化到/dev/null

mailcheck & 2>/dev/null
思考几分钟,另一种方法可能是使用write。
通过管道将后台任务的输出传递给您自己,这样它就可以随时完成,并且您可以存储来自stdout和stderr的任何其他输出。

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

您可以这样调用脚本:

(exec mailcheck & )
这似乎有效:

(mailcheck &)

这条信息不是来自mailcheck,而是来自bash的工作控制,告诉你你的背景工作。避免它的方法是告诉bash您不希望它由作业控制管理:

mailcheck &
disown $!

不,对不起,我应该说我试过了,它似乎不是stderr,不应该是stderr,因为它不是一个错误。因为它是在后台运行的,所以它只是让您知道该过程已成功完成。也许是stdout?那也不好,我不明白,如果不是stdout或stderr那是什么?嗯。。。输出不是来自脚本本身,因此它不是标准输出。嗯,我不确定,但既然你用另一种方式找到了答案,一切都很好!:)实际上,您仍然需要按enter键,因为它挂在一个空行上。有办法解决吗?仍然没有什么好结果:[1]+Done exec~/bin/MailCheck在我的测试中运行良好。当我在.bashrc中包含脚本调用时,我下次登录时不会收到任何
Done
消息。@anubhava:我可以在我的bashrc中使用此技术来获取给定目录中所有脚本的源代码,如下所示:
List=(~/bin/Completion*);对于“${List[@]}”中的文件;do(exec.$File“&)done
但是我得到了这个错误:
bash:exec::无法执行:是一个目录
@Dennis:发现得很好-我将取消重定向。为什么不干脆
邮件检查和拒绝