Я пытаюсь запустить несколько команд, которые никогда не завершаются. Эти команды отслеживают каталог и обновляют файлы при их изменении. Идея в том, что мне нужно несколько папок, отслеживаемых разными инструментами, и возможность запускать их все из одной команды.
Для обычных команд, которые возвращают ожидаемый результат, разделение команд точкой ;
работает.
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/;
решение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».
решение2
Попробуй это:
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/ &