
Recebi o erro:
bash: erro de sintaxe próximo ao token inesperado `;'
devido ao seguinte comando:
evince foo.pdf bar.pdf &; emacs foo.tex &
É ilegal separar comandos ;
ao usar &
um trabalho em segundo plano? Ou há outro motivo pelo qual isso não funcionou?
Obrigado.
Responder1
Você não precisa do ponto e vírgula. Depois de enviado para segundo plano, é gratuito obter outro comando.
evince foo.pdf bar.pdf & emacs foo.tex &
Responder2
Aliás, o principal problema é que os shells (derivados de Bourne) não permitem comandos vazios.
";" e "&" são terminadores de comando, significando fg e bg respectivamente. Então "; ;" (ou ";" no início de uma linha) também é inválido.
(Novas linhas implicam ";" se houver um comando ainda não finalizado, a menos que você use "\" para continuar a linha.)
Os idiomas variam muito nessas políticas:
Linguagens derivadas de C permitem declarações vazias.
Pascal e PERL possuem separadores, não terminadores.
Responder3
Não, está apenas confuso e não consigo entender o que você quer dizer.
Você precisa agrupar o & com o comando que 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ê também quiser encadear mais comandos após o final.