18

Я получил ошибку:

bash: синтаксическая ошибка рядом с неожиданным токеном `; '

из-за следующей команды:

evince foo.pdf bar.pdf &; emacs foo.tex &

Я незаконно разделять команды ; при использовании & для фона работы? Или есть другая причина, по которой это не сработало?

Спасибо.

3 ответа3

35

Вам не нужна точка с запятой. После отправки в фоновый режим можно получить другую команду.

evince foo.pdf bar.pdf & emacs foo.tex &
12

Кстати, основная проблема заключается в том, что (производные от Борна) оболочки не допускают пустых команд.

";" и "&" - это терминаторы команд, что означает fg и bg соответственно. Так "; ;" (или «;» в начале строки) также недопустимо.

(Символы новой строки подразумевают ";", если есть еще не завершенная команда, если только вы не используете "\" для продолжения строки.)

Языки сильно различаются по этим правилам:

Производные от C языки допускают пустые операторы.

Паскаль и PERL имеют разделители, а не терминаторы.

-3

Нет, это просто запутано и не может понять, что вы имеете в виду.

Вам нужно сгруппировать & с командой, которую вы хотите поместить в фон:

$ (evince foo.pdf bar.pdf &); emacs foo.tex &

Это отлично работает. Еще более явным будет:

$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)

Особенно, если вы затем захотите объединить больше команд после конца.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .