Você não precisa do ponto-e-vírgula. Depois que ele é enviado para o plano de fundo, é grátis ter outro comando.
evince foo.pdf bar.pdf & emacs foo.tex &
Recebi o erro:
bash: syntax error near unexpected token ';'
devido ao seguinte comando:
evince foo.pdf bar.pdf &; emacs foo.tex &
É ilegal separar comandos com ;
ao usar &
para executar um trabalho em segundo plano? Ou há outra razão pela qual isso não funcionou?
Obrigado.
BTW, a questão principal é que shells (derivados de Bourne) não permitem comandos vazios.
";" e "&" são terminadores de comando, significando fg e bg respectivamente. Assim "; ;" (ou ";" no início de uma linha) também é inválido.
(Nova linha (s) implica ";" se houver um comando ainda não terminado, a menos que você use "\" para continuar a linha.
Os idiomas variam muito nessas políticas:
As linguagens derivadas de C permitem instruções vazias.
Pascal e PERL têm separadores, não terminadores.
Não, é apenas confuso e não funciona bem o que você quer dizer.
Você precisa agrupar o & com o comando que você deseja colocar em segundo plano:
$ (evince foo.pdf bar.pdf &); emacs foo.tex &
Isso funciona bem. Ainda mais explícito seria:
$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)
Especialmente se você quiser encadear mais comandos depois do fim também.