Porque ; depois e retornar um erro de token inesperado no bash?

Porque ; depois e retornar um erro de token inesperado no bash?

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.

informação relacionada