我需要在后台运行一个进程,然后退出当前终端。
以下命令会导致错误:
> google-chrome-stable &! && exit
zsh: parse error near '&&'
我考虑过简单地调用“google-chrome-stable &!”并通过 if 语句检查错误代码,但希望找到一种更简单的方法来完成此操作。
答案1
&!
和&&
两个单独的命令,所以你不能将两者结合起来,所以
google-chrome-stable &! exit
可能就是你所追求的。
在后台命令退出之前,您无法获取退出代码...
答案2
从启动后台作业返回到调用 shell 的退出状态是总是零:
% bogus &
[1] 66712
% zsh: command not found: bogus
[1] + exit 127 bogus
% echo $?
0
... 和&!
都是&&
命令终止符。这意味着你的命令可能应该写成
google-chrome-stable &! exit
或作为等价物
google-chrome-stable &!
exit
wait
您只能通过使用作业的作业 ID(因为您否认了它,所以没有)或进程 ID(但您不能,因为您否认了该进程,因此无法获取后台作业的真实退出状态)不再是 shell 视为子进程的进程;它已从 shell 的当前作业列表中删除)。
如果你没有放弃这份工作,也许通过
google-chrome-stable & chrome_pid=$!
那么该命令wait $chrome_pid
最终会以后台作业的退出状态退出,但直到该作业终止(由于无法启动或通过某种方式关闭浏览器)。