/ Ako na pozadí úlohy v rámci slučky bash - bash, slučky, pozadie

Ako na pozadí úlohy v rámci slučky bash - bash, slučky, pozadie

Vzhľadom na nasledujúcu slučku bash:

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

Ako "na pozadí" jednotlivé úlohy?

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

Snažil som sa "bash" echo a to nefungovalo ani:

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

odpovede:

2 pre odpoveď č. 1

oba & a ; sú terminátory príkazov v shell.

Stačí jeden príkaz ukončiť. Takže nepoužívajte obaja spolu:

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

Rovnakú chybu by ste dostali dvoma ;aj:

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

Všimnite si, že sa snažíte použiť ;; dostane inú chybu, pretože ;; je špeciálny token pre shell (použitý v case Vyhlásenie):

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

Shell gramatika:

%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 pre odpoveď č. 2
for ((x=1; x<=$y; x++)); do { echo $x & } ; done

1 pre odpoveď č. 3

To bude fungovať:

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

Všimnite si, že nie je ; po &, Použitie zlomkov riadkov to zjednoduší:

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