Відповіді:
До речі, основна проблема полягає в тому, що оболонки (похідні Борна) не дозволяють пусті команди.
";" і "&" - командні термінатори, що означають відповідно fg і bg. Так "; ;" (або ";" на початку рядка) також є недійсним.
(Нові рядки означають ";" якщо є ще не завершена команда, якщо ви не використовуєте "\" для продовження рядка.)
Мови залежать від цих політик:
Мови, похідні з С, дозволяють пусті заяви.
Паскаль і 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