Uruchom dwa skrypty, które działają w nieskończoność w skrypcie powłoki

0

Jestem webdevem i używam kompilatora JSX i preprocesora SASS do kompilacji moich .jsxi .scssplików. Kiedy zaczynam działać, uruchamiam te dwa osobne polecenia:

jsx -x jsx jsx js --watch --no-cache-dir
sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch

Jak widać, oba mają --watchflagę, co oznacza, że ​​będą śledzić swoje odpowiednie pliki, dopóki nie zostaną zabite. Chcę móc używać skryptu powłoki, który uruchamia oba te skrypty jednocześnie. Do tej pory mam:

#!/bin/sh

echo "Starting JSX Compiler..."
jsx -x jsx jsx js --watch --no-cache-dir
echo "Starting SASS Preprocessor"
sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch

ale wykonuje to tylko pierwszy program, jsxa nie sassdlatego, że jsx jest uruchomiony. Jak mogę uruchomić oba te programy typu „obserwuj” za pomocą skryptu powłoki?

użytkownik2200321
źródło

Odpowiedzi:

1

Istnieją dwie możliwości osiągnięcia tego celu.

Po pierwsze, możesz uruchomić pierwsze polecenie w tle, po prostu dodając znak „&” na końcu wiersza polecenia:

#!/bin/sh 
echo "Starting JSX Compiler..."
jsx -x jsx jsx js --watch --no-cache-dir &
echo "Starting SASS Preprocessor" 
sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch &

Robiąc to, możesz popracować nad użyciem tego samego terminala, być może wyjście do sdtout i stderr zostanie wyświetlony w terminalu, co czasem może być nieco mylące. Ale procesy będą działały w tle, dopóki nie zamkniesz terminala.

Jeśli to nie wystarczy i chcesz uruchomić procesy, nawet jeśli terminal jest zamknięty, potrzebujesz nohupdodatkowo polecenia tutaj:

#!/bin/sh 
echo "Starting JSX Compiler..."
nohup jsx -x jsx jsx js --watch --no-cache-dir &
echo "Starting SASS Preprocessor" 
nohup sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch &

Spowoduje to również uruchomienie procesów w tle, nadal używasz znaków ampersand na końcu poleceń, ale dodatkowo powiesz procesom, aby zignorowały sygnał HUP. W ten sposób procesy będą działać, dopóki program się nie zakończy, proces zostanie zabity lub system zostanie zamknięty.

Oliver Friedrich
źródło