Respuestas:
Por cierto, el problema central es que los shells (derivados de Bourne) no permiten comandos vacíos.
";" y "&" son terminadores de comando, lo que significa fg y bg respectivamente. Entonces "; ;" (o ";" al comienzo de una línea) tampoco es válido.
(Newline (s) implica ";" si hay un comando aún no 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.
No, solo está confundido y no puede entender exactamente lo que quieres decir.
Debe agrupar el & con el comando que desea 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 también querías encadenar más comandos después del final.
if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi