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