
Я получил сообщение об ошибке:
bash: синтаксическая ошибка около неожиданного токена `;'
из-за следующей команды:
evince foo.pdf bar.pdf &; emacs foo.tex &
Я незаконно разделять команды с помощью ;
при использовании &
для фоновой работы? Или есть другая причина, по которой это не сработало?
Спасибо.
решение1
Точка с запятой не нужна. После того, как она отправлена в фоновый режим, она свободна для получения другой команды.
evince foo.pdf bar.pdf & emacs foo.tex &
решение2
Кстати, основная проблема в том, что оболочки (производные от Bourne) не допускают пустых команд.
";" и "&" являются терминаторами команд, означающими fg и bg соответственно. Поэтому "; ;" (или ";" в начале строки) также недопустимо.
(Новая строка(ы) подразумевает ";", если есть еще не завершенная команда, если только вы не используете "\" для продолжения строки.)
Языки этих политик сильно различаются:
Языки, производные от C, допускают пустые операторы.
В языках Pascal и PERL используются разделители, а не терминаторы.
решение3
Нет, просто запутался и не могу понять, что вы имеете в виду.
Вам необходимо сгруппировать & с командой, которую вы хотите перевести в фоновый режим:
$ (evince foo.pdf bar.pdf &); emacs foo.tex &
Это работает отлично. Еще более явным было бы:
$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)
Особенно, если вы затем захотите связать еще несколько команд после окончания.