Ответы:
Кстати, основная проблема заключается в том, что (производные от Борна) оболочки не допускают пустых команд.
";" и "&" - это терминаторы команд, что означает fg и bg соответственно. Так "; ;" (или «;» в начале строки) также недопустимо.
(Символы новой строки подразумевают ";", если есть еще не завершенная команда, если только вы не используете "\" для продолжения строки.)
Языки сильно различаются по этим правилам:
Производные от C языки допускают пустые операторы.
Паскаль и PERL имеют разделители, а не терминаторы.
Нет, это просто запутано и не может понять, что вы имеете в виду.
Вам нужно сгруппировать & с командой, которую вы хотите поместить в фон:
$ (evince foo.pdf bar.pdf &); emacs foo.tex &
Это отлично работает. Еще более явным будет:
$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)
Особенно, если вы затем захотите объединить больше команд после конца.
if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi