為什麼要這樣做;在 bash 中傳回意外的令牌錯誤?

為什麼要這樣做;在 bash 中傳回意外的令牌錯誤?

我收到錯誤:

bash:意外標記“;”附近出現語法錯誤

由於以下命令:

evince foo.pdf bar.pdf &; emacs foo.tex &

我在使用後台作業;時將命令分開是非法的嗎?&或者還有其他原因導致這行不通?

謝謝。

答案1

你不需要分號。將其發送到後台後,就可以自由地獲取另一個命令。

evince foo.pdf bar.pdf & emacs foo.tex &

答案2

順便說一句,核心問題是(Bourne 派生的)shell 不允許空命令。

“;”和「&」是指令終止符,分別表示fg和bg。所以 ”; ;” (或行首的「;」)也是無效的。

(如果有尚未終止的命令,換行符號意味著“;”,除非您使用“\”繼續該行。)

這些政策的語言差異很大:

C 派生語言允許空語句。

Pascal 和 PERL 有分隔符,沒有終止符。

答案3

不,它只是很混亂,無法完全理解你的意思。

您需要將 & 與要放入背景的指令分組:

$ (evince foo.pdf bar.pdf &); emacs foo.tex &

效果很好。更明確的是:

$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)

特別是如果您想在結束後連結更多命令。

相關內容