將進程傳送到後台並拒絕並退出終端(& 和 && 運算子在 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(但您不能,因為您否認了該進程,因此無法取得後台作業的真實退出狀態)

如果你沒有否認這份工作,也許透過

google-chrome-stable & chrome_pid=$!

那麼該指令wait $chrome_pid最終會以後台作業的退出狀態退出,但直到該作業終止(由於無法啟動或透過某種方式關閉瀏覽器)。

相關內容