Dois programas longos em um script cancelados com um Ctr-c

0

Sou um desenvolvedor da web que executa dois scripts durante o desenvolvimento da web. Um observa mudanças no CSS e um observa as alterações do JS. Quando uma alteração é detectada, ela mesclará e concatenará os arquivos apropriados. Você pode parar de "assistir" para alterado por Ctr-c'ing e parar cada processo.

Acabei de usar as janelas do Tmux para executar esses scripts, mas outros desenvolvedores que não usam a tela ou o tmux pedem para combinar esses shell scripts "watch" em um arquivo. Eu não tenho certeza de como fazer isso, quando eu os combinei apenas um processo é executado e quando eu Ctrl-c, então o outro processo começa a assistir. Idealmente, haveria uma maneira de fazê-los trabalhar com uma chamada e interromper o processo quando uma chamada de parada for enviada.

Estou assumindo que preciso desembolsar aqui, mas não tenho certeza de como fazer isso. Os scripts usam o bash padrão e funcionam em todos os sistemas baseados em Unix. Aqui está o código até agora:

#!/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      
    
por Mauvis Ledford 17.11.2011 / 22:12

1 resposta

4

Eu acho que você poderia rodar seus scripts em segundo plano (usando &), armazenando seu pid de $ !. Do que você pode esperar para que os processos sejam concluídos. Para matar os dois scripts, você pode configurar o trap no kill e matar todos os processos em segundo plano.

#!/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

Esta função - eu testei isso. Basta executar este comando e, finalmente, pressionar Ctrl + C. Ambos os processos devem ser finalizados.

    
por 17.11.2011 / 22:23

Tags