我试图异步运行一些命令在登录脚本 ( .bash_profile
) 上。
当我打开新终端时,我会看到这样的消息。当我通过 SSH 登录系统时它们也会出现。
Last login: Sat Jun 11 19:21:44 on ttys001
[1]- Exit 127 nohup -c 'git fetch -p && git pull' < /dev/null >&/dev/null (wd: ~/cryptopp)
(wd now: ~)
[2]+ Exit 127 nohup -c 'git fetch -p && git pull' < /dev/null >&/dev/null (wd: ~/openssl)
(wd now: ~)
登录脚本执行以下操作:
if [ -d "$HOME/cryptopp" ]; then
cd "$HOME/cryptopp"
nohup -c 'git fetch -p && git pull' </dev/null &>/dev/null &
fi
if [ -d "$HOME/openssl" ]; then
cd "$HOME/openssl"
nohup -c 'git fetch -p && git pull' </dev/null &>/dev/null &
fi
额外的重定向回转是由于nohup:忽略输入并将输出附加到“nohup.out”。额外的单引号是由于如何转义单引号字符串中的单引号?
如果重要的话,我正在 OS X 上工作,所以它使用 Bash 3。但脚本通常在 Linux、BSD 和 Solaris 上运行,而且我也在 Debian 8 上看到它。
我有几个问题。首先,抱怨的问题是什么nohup
?其次,我该如何解决nohup
所抱怨的问题?第三,如何抑制此类消息?
答案1
输出不是来自nohup
,而是来自您的 shell (bash)。
您使用 使这些进程进入后台&
,因此 shell 会在命令退出时告诉您。如果您不希望 shell 执行此操作,可以使用disown
.另外,通过使用disown
,您不再需要nohup
.例如:
if [ -d "$HOME/cryptopp" ]; then
(
cd "$HOME/cryptopp"
git fetch -p && git pull
) </dev/null &>/dev/null &
disown $!
fi
在示例中,我们使用重定向生成一个子 shell,将其置于后台,然后放弃它。