
Recibí el error:
bash: error de sintaxis cerca del token inesperado `;'
debido al siguiente comando:
evince foo.pdf bar.pdf &; emacs foo.tex &
¿Es ilegal separar comandos ;
cuando se utilizan &
como fondo de un trabajo? ¿O hay otra razón por la que esto no funcionó?
Gracias.
Respuesta1
No necesitas el punto y coma. Después de enviarlo a segundo plano, es gratis obtener otro comando.
evince foo.pdf bar.pdf & emacs foo.tex &
Respuesta2
Por cierto, el problema principal es que los shells (derivados de Bourne) no permiten comandos vacíos.
";" y "&" son terminadores de comando, es decir, fg y bg respectivamente. Entonces "; ;" (o ";" al principio de una línea) tampoco es válido.
(Las nuevas líneas implican ";" si hay un comando que aún no ha terminado, a menos que use "\" para continuar la línea).
Los idiomas varían mucho en estas políticas:
Los lenguajes derivados de C permiten declaraciones vacías.
Pascal y PERL tienen separadores, no terminadores.
Respuesta3
No, simplemente es confuso y no puede entender exactamente lo que quieres decir.
Debes agrupar el & con el comando que deseas poner en segundo plano:
$ (evince foo.pdf bar.pdf &); emacs foo.tex &
Eso funciona bien. Aún más explícito sería:
$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)
Especialmente si luego también quisieras encadenar más comandos después del final.