Я пытаюсь выполнить несколько команд, которые никогда не заканчиваются. Эти команды просматривают каталог и обновляют файлы при их изменении. Идея состоит в том, что мне нужно несколько папок, отслеживаемых разными инструментами, которые могут запускать все из них одной командой.
Для обычных команд, которые возвращаются, как и ожидалось, разделяя команды с ;
работами.
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/;
linux
command-line
bash
script
AlbertEngelB
источник
источник
Ответы:
Вы можете запустить их в фоновом режиме, добавив амперсанд в команду:
Если вы хотите увидеть все задания, работающие в фоновом режиме, выполните:
Чтобы вернуть фоновое задание на передний план, используйте fg (PID не обязателен):
Чтобы отправить заднее задание (которое «блокирует» вашу оболочку) обратно в фоновый режим, используйте Ctrl-Z / bg:
Я предполагаю, что задания привязаны к вашей оболочке и не будут автоматически разветвляться. Это означает, что если вы вошли в систему через SSH и отключились, оболочка получает сигнал SIGHUP, который также будет отправлен на задания. Это остановит / выйдет из ваших команд.
Если вы хотите, чтобы задания работали и работали даже после того, как вы вышли из системы, вы можете заглянуть во встроенное в bash «disown»:
Другой вариант - nohup (команда, не встроенная в bash), или вы используете терминальный мультиплексор, такой как «screen» или «tmux».
источник
Попробуй это:
источник
;
после амперсанда. Спасибо!