如何在bash循环中执行后台任务

时间:2015-09-03 16:29:55

标签: bash loops background

给出以下bash循环:

for ((x=1; x<=$y; x++)); do echo $x; done
1
2
3
4

如何“背景”个别任务?

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

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

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

3 个答案:

答案 0 :(得分:2)

&;都是shell中的命令终止符。

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

for ((x=1; x<=$y; x++)); do echo $x & done

通过使用两个;来获得相同的错误:

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

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

-bash: syntax error near unexpected token `;;'

Shell grammar

%start  complete_command
%%
complete_command : list separator
                 | list
                 ;
list             : list separator_op and_or
                 |                   and_or
                 ;
....
separator_op     : '&'
                 | ';'
                 ;
separator        : separator_op linebreak
                 | newline_list
                 ;

答案 1 :(得分:1)

for ((x=1; x<=$y; x++)); do { echo $x & } ; done

答案 2 :(得分:1)

这将有效:

for ((x=1; x<=y; x++)); do echo $x & done

请注意;之后没有&。但是,使用换行符会使其更具可读性:

for ((x=1; x<=y; x++)); do
  echo $x &
done