在“if”中将任务发送到后台

Lan*_*nes 12 shell bash control-flow

为什么是这样?

if true; then sleep 3 &; fi
bash: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

我想跑

sleep 3
Run Code Online (Sandbox Code Playgroud)

在后台,以便命令 ["sleep 3" 只是一个示例] 将以“并行”样式运行,因此它完成得更快。但我得到这个:

bash: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

错误信息。为什么?为什么我不能向后台发送任务?

enz*_*tib 13

因为&已经是语句分隔符,所以不要放在;后面。


ДМИ*_*КОВ 6

在这种情况下,您似乎不需要分开命令(&将它们本身分开)。

例如。

$> if true; then (sleep 3; echo ok) &  fi
[1] 14224
$> ok
Run Code Online (Sandbox Code Playgroud)