如何在 bash 循环中后台任务

jav*_*dba 1 bash loops background

鉴于以下 bash 循环:

for ((x=1; x<=$y; x++)); do echo $x; done
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

如何“背景”单个任务?

09:25:58/~ $for ((x=1; x<=$y; x++)); do echo $xi &; done
-sh: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

我尝试“重击”回声,但也不起作用:

09:26:37/~ $for ((x=1; x<=$y; x++)); do bash -c "echo $x" &; done
-sh: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

Eta*_*ner 5

双方 &;在shell命令终止符。

您只需要终止每个命令一次。所以不要同时使用两者:

for ((x=1; x<=$y; x++)); do echo $x & done
Run Code Online (Sandbox Code Playgroud)

使用两个;s也会得到相同的错误:

$ for ((x=1; x<=$y; x++)); do echo $x ; ; done
-bash: syntax error near unexpected token `;'
Run Code Online (Sandbox Code Playgroud)

请注意,尝试使用;;会得到不同的错误,因为它;;是 shell 的特殊标记(在case语句中使用):

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

外壳语法

%start  complete_command
%%
complete_command : list separator
                 | list
                 ;
list             : list separator_op and_or
                 |                   and_or
                 ;
....
separator_op     : '&'
                 | ';'
                 ;
separator        : separator_op linebreak
                 | newline_list
                 ;
Run Code Online (Sandbox Code Playgroud)