कुछ मुद्दे हैं:
- स्क्रिप्ट कभी भी पहले से आगे नहीं बढ़
done
पाती है और यही मुख्य कारण है कि दूसरा भाग काम नहीं कर रहा है।
- कोई शेबंग नहीं है ।
while true :
अजीब है। दोनों 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
यह एन 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
चाल के लिए धन्यवाद सभी वंशज को मारने की कोशिश करता है :
वर्तमान प्रक्रिया समूह की सभी प्रक्रियाएँ संकेतित हैं