为什么在 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 &)

特别是如果您还想在结束后链接更多命令。

相关内容