Я пытаюсь выполнить несколько команд, которые никогда не заканчиваются. Эти команды просматривают каталог и обновляют файлы при их изменении. Идея состоит в том, что мне нужно несколько папок, которые отслеживаются разными инструментами и могут запускать все из них одной командой.

Для нормальных команд, которые возвращаются, как и ожидалось, разделяя команды с ; работает.

ls /;
cd /;
ls var;
cd var;
ls log;
cd log

Когда я пытаюсь связать воедино невозвратные команды (например, tail -f <some_file> или coffee -c -w <some_coffeescript_folder> , будет выполняться только первая команда).

Есть ли способ сделать это в одной команде? Вот команды, которые я пытаюсь связать вместе:

coffee -c -m -w public/javascript/*.coffee; \
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/; \
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/;

2 ответа2

1

Вы можете запустить их в фоновом режиме, добавив амперсанд в команду:

coffee -c -m -w public/javascript/*.coffee &
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/ &
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/ &

Если вы хотите увидеть все задания, работающие в фоновом режиме, выполните:

jobs -l

Чтобы вернуть фоновое задание на передний план, используйте fg (PID не обязателен):

fg <PID>

Чтобы отправить заднее задание (которое "блокирует" вашу оболочку) обратно в фоновый режим, используйте Ctrl-Z / bg:

$ tail -f foobar.log # is "blocking" your shell
(hit Ctrl-Z)
$ bg

Я предполагаю, что задания привязаны к вашей оболочке и не будут автоматически разветвляться. Это означает, что если вы вошли в систему через SSH и отключились, оболочка получает сигнал SIGHUP, который также будет отправлен на задания. Это остановит / выйдет из ваших команд.

Если вы хотите, чтобы задания работали и работали даже после того, как вы вышли из системы, вы можете заглянуть во встроенное в bash "disown":

jobs               # fetch job ID in the squre brackets
disown -h %<JOBID> # disown job by using the job ID

Другой вариант - nohup (команда, не встроенная в bash), или вы используете терминальный мультиплексор, такой как "screen" или "tmux".

1

Попробуй это:

coffee -c -m -w public/javascript/*.coffee &
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/ &
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/ &

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