Я веб-разработчик, который запускает два сценария во время веб-разработки. Один следит за изменениями CSS, а другой следит за изменениями JS. Когда изменение обнаружено, оно объединит и объединит соответствующие файлы. Вы можете остановить "наблюдение" за изменениями, нажав Ctr-c'ing и остановив каждый процесс.

Я просто использовал окна Tmux для запуска этих сценариев, но другие разработчики, которые не используют screen или tmux, просят объединить эти сценарии оболочки "watch" в один файл. Я не уверен, как это сделать, потому что, когда я объединял их, запускается только один процесс, а когда я нажимаю Ctrl-c, другой процесс начинает наблюдать. Оптимально был бы способ заставить их работать с одним вызовом и остановить оба процесса при отправке вызова остановки.

Я предполагаю, что мне нужно раскошелиться, но я не уверен, как это сделать. Скрипты используют стандартный bash и работают на всех Unix-системах. Вот код на данный момент:

#!/bin/sh                                                                                                                                                                                                                                                                                                                                                                 
# Watch for js template changes.
./template-watch.sh                                                                                                                                                                                                                                                                                                                                                       

# Watch for changes in sass files and render them to CSS files.                                                                                                                                                                                                                                                                                                           
sass --watch --style=compressed ../src/scss:../assets/css      

1 ответ1

4

Я думаю, вы можете запускать свои скрипты в фоновом режиме (используя &), сохраняя их pid из $ !. Чем вы можете дождаться завершения этих процессов. Чтобы уничтожить оба сценария, вы можете настроить прерывание на сигнал уничтожения и уничтожить все фоновые процессы.

#!/bin/sh

kill_background_processes() {
    kill $template_watch_pid $sass_pid
}    
trap kill_background_processes SIGINT SIGTERM

# Watch for js template changes.
./template-watch.sh &
template_watch_pid=$!

# Watch for changes in sass files and render them to CSS files.
sass --watch --style=compressed ../src/scss:../assets/css &
sass_pid=$!

wait $template_watch_pid $sass_pid

Это функции - я проверил это. Просто запустите эту команду и, наконец, нажмите Ctrl + C. Оба процесса должны быть завершены.

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