Есть несколько вопросов:
- Сценарий никогда не выходит за рамки первого
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
:
Все процессы в текущей группе процессов сигнализируются