为什么?在 bash 中返回一个意外的令牌错误之后?

DQd*_*dlM 29 linux bash

我收到错误:

bash:意外标记附近的语法错误`;'

由于以下命令:

evince foo.pdf bar.pdf &; emacs foo.tex &
Run Code Online (Sandbox Code Playgroud)

;&用于后台作业时将命令分开是否违法?或者还有其他原因这不起作用?

谢谢你。

The*_*heo 47

你不需要分号。在它被发送到后台后,它可以自由地获得另一个命令。

evince foo.pdf bar.pdf & emacs foo.tex &
Run Code Online (Sandbox Code Playgroud)

  • 这帮助我在 2 小时的咒骂后使用 if 语句。如果有人需要这个:`if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; 然后 nohup sleep 5 > /dev/null 2>&1</dev/null & fi` (2认同)

小智 16

顺便说一句,核心问题是(Bourne 派生的)shell 不允许空命令。

“;” 和 "&" 是命令终止符,分别表示 fg 和 bg。所以 ”; ;” (或行首的“;”)也是无效的。

(如果有一个尚未终止的命令,换行符意味着“;”,除非您使用“\”来继续该行。)

这些政策的语言差异很大:

C 派生语言允许空语句。

Pascal 和 PERL 有分隔符,而不是终止符。