Dado el siguiente bucle de bash:
for ((x=1; x<=$y; x++)); do echo $x; done
1
2
3
4
¿Cómo "hacer fondo" las tareas individuales?
09:25:58/~ $for ((x=1; x<=$y; x++)); do echo $xi &; done
-sh: syntax error near unexpected token `;"
Intenté "golpear" el eco y eso tampoco funcionó:
09:26:37/~ $for ((x=1; x<=$y; x++)); do bash -c "echo $x" &; done
-sh: syntax error near unexpected token `;"
Respuestas
2 para la respuesta № 1Ambos &
y ;
Son terminadores de comando en el shell.
Solo necesitas terminar cada comando una vez. Así que no uses los dos juntos.
for ((x=1; x<=$y; x++)); do echo $x & done
Obtendrías el mismo error usando dos ;
s también:
$ for ((x=1; x<=$y; x++)); do echo $x ; ; done
-bash: syntax error near unexpected token `;"
Tenga en cuenta que tratando de usar ;;
recibe un error diferente porque ;;
es un token especial para el shell (usado en case
declaraciones):
-bash: syntax error near unexpected token `;;"
%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 para la respuesta № 2
for ((x=1; x<=$y; x++)); do { echo $x & } ; done
1 para la respuesta № 3
Esto funcionará:
for ((x=1; x<=y; x++)); do echo $x & done
Tenga en cuenta que no hay ;
después &
. Sin embargo, usar saltos de línea lo hará más legible:
for ((x=1; x<=y; x++)); do
echo $x &
done