我添加了几行要在系统范围内执行的代码/etc/bash.bashrc
,例如通过电子邮件通知登录等。我注意到,在exit
调用时logout
,系统会将这些行打印给用户,如下所示:
USER@IP:~$ exit
logout
[1]+ Done cat /home/USER/a.txt | ssmtp [email protected]
Connection to IP closed.
我怎样才能在我的系统上抑制这种情况?
答案1
您的输出部分[1]+ Done ...
似乎来自 Bash 的作业控制。您通常会在后台启动的命令终止时获得它,如下所示:
$ sleep 1 &
[1] 20931
$
[1]+ Done sleep 1
抑制这些作业控制输出的一个解决方案是在子 shell 中启动后台命令,将其括在括号中:
$ ( sleep 1 &)
$
我无法判断这是否适合您的情况,因为您还没有展示您的实际命令,而且这种方法有一些缺点:
该作业无法再受控制(例如jobs
,命令),但由于它是从启动脚本运行的,因此我认为无论如何这都不是故意的。bg
如果 命令正在修改其环境(例如设置变量或更改工作目录),那么这只会影响子 shell,而不会再影响脚本的其余部分。fg
另一种方式是让 shell 在开始使用后忘记该作业disown
,例如:
$ sleep 1 & disown
[1] 27248
$
但是,这样一来,它在 shell 退出时也不会再终止,因此如果我理解正确的话,它可能会在用户注销后继续运行(如果不理解正确,请纠正我)。
资料来源及进一步阅读: