将进程发送到后台并拒绝并退出终端(& 和 && 运算符在 zsh 中发生冲突)

将进程发送到后台并拒绝并退出终端(& 和 && 运算符在 zsh 中发生冲突)

我需要在后台运行一个进程,然后退出当前终端。

以下命令会导致错误:

> 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最终会以后台作业的退出状态退出,但直到该作业终止(由于无法启动或通过某种方式关闭浏览器)。

相关内容