Как запустить команду на заднем плане без амперсанда (&)?

Как запустить команду в фоновом режиме в Bash без амперсанда (&) в конце команды?

Обновление: я хочу сделать это, чтобы я мог сделать while inotifywait -e modify app.py; do killall -9 python; python app.py &; done, но это невозможно из-за синтаксиса.

2 ответа

Решение

Использование coproc python app.py

От man bash

Coprocesses

Копроцесс - это команда оболочки, которой предшествует зарезервированное слово coproc. Копроцесс выполняется в подоболочке асинхронно, как если бы команда была прервана оператором & control, с двухсторонним каналом, установленным между исполняющей оболочкой и сопроцессом.

Формат для сопроцесса:

команда [NAME] coproc [перенаправления]

Ваш синтаксис немного выключен:

while inotifywait -e modify app.py; do killall -9 python; python app.py &; done

Так должно быть:

while inotifywait -e modify app.py; do killall -9 python; python app.py & done

В отличие от C-подобных языков, вы не можете иметь пустой оператор до ; или же &,

Другие вопросы по тегам