Risposte:
A proposito, il problema principale è che le shell (derivate da Bourne) non consentono comandi vuoti.
";" e "&" sono terminatori di comando, che significano rispettivamente fg e bg. Così "; ;" (o ";" all'inizio di una riga) non è valido.
(Newline (s) implicano ";" se esiste un comando non ancora terminato, a meno che non si usi "\" per continuare la linea.)
Le lingue variano molto su queste politiche:
I linguaggi derivati da C consentono istruzioni vuote.
Pascal e PERL hanno separatori, non terminatori.
No, è solo confuso e non riesce a capire bene cosa intendi.
Devi raggruppare il & con il comando che vuoi mettere in background:
$ (evince foo.pdf bar.pdf &); emacs foo.tex &
Funziona benissimo. Ancora più esplicito sarebbe:
$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)
Soprattutto se poi volevi incatenare più comandi anche dopo la fine.
if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi