Есть несколько вопросов:
- Сценарий никогда не выходит за рамки первого,
done
и это главная причина, по которой вторая часть не работает. - Там нет шебанга .
while true :
странно. Обаtrue
и:
являются встроенными в Bash, оба возвращают true . Единственногоwhile true
было бы достаточно, то же самое сwhile :
. Кажется, вы хотели ( ? ) Использовать оба варианта одновременно, и этот фрагмент кода даже «работает», то есть он не выходит из строя. Это не терпит неудачу, потому что это:
ваше не встроенное, как я упоминал; это аргументtrue
команды.true
отбрасывает свои аргументы командной строки.true :
илиtrue almost anything
эквивалентноtrue
, так что вашиwhile true :
работы, какwhile true
.
Способ перезапуска множества отдельных процессов из одного скрипта выглядит следующим образом:
#!/bin/bash trap "kill 0" SIGINT while :; do process1; done & while :; do process2; done & # ... while :; do processN; done
Это выполняет N while
циклов в отдельных оболочках (N-1 подоболочки и основная оболочка), поэтому каждый отдельный цикл выполняется параллельно, независимо. В вашем случае сценарий может быть:
#!/bin/bash trap "kill 0" SIGINT while : do ./stream.sh echo "Stream has Crashed" done & while : do ./current_song.sh echo "Current Song has Crashed" done
Ловушка убивает (пытается убить) все потомок благодаря этой kill 0
уловке :
Все процессы в текущей группе процессов сигнализируются