जवाबों:
आप some_command
अपनी परीक्षा की स्थिति के रूप में उपयोग कर सकते हैं।
while ! some_command; do sleep 1; done
जब तक some_command
कोई त्रुटि नहीं होगी, शर्त सही रहेगी ।
या अधिक वर्बोज़ तरीका यदि आप अतिरिक्त जाँच करना चाहते हैं:
while ! some_command
do
# add more if desired
sleep 1
done
while ! some_command; do several; commands; sleep 1; done
यह वह है जिसके लिए until
लूप है:
until some_command
do sleep 1
done
यह एक while
लूप का तार्किक निषेध है ।
until
लूपuntil
पाश लगातार एक पर अमल करेगा यौगिक-सूची में लंबे समय के लिए एक और के रूप में के रूप में यौगिक-सूची एक गैर शून्य बाहर निकलने का दर्जा प्राप्त है।
जब तक लूप का प्रारूप इस प्रकार है:
यौगिक-सूची -1 तक यौगिक-सूची -2 करें किया हुआ
until
आदेश पूरा करता है। अन्यथा, यौगिक-सूची -2 निष्पादित की जाएगी, और प्रक्रिया दोहराती है।आप बस कर सकते हैं:
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
इसका नुकसान यह है कि यह हमेशा एक सेकंड पहले सोता है
यदि आप 0 से बाहर निकलने के लिए किसी भी आदेश पर बाहर निकलने में सक्षम होना चाहते हैं, तो आप कर सकते हैं:
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
कौन सा कोर्स भी सिर्फ काम करता है some_command
[
और ]
कमांड के आसपास।
न तो while ! ...
है और न ही until ...
प्रणाली है कि POSIX.1-2001 करने से पहले अपने खोल वातावरण सील कर दी पर काम करता है। यह, हालांकि, करता है।
while :; do
if some command; then
break
fi
sleep 1
done
यदि आपको कुल पोर्टेबिलिटी की आवश्यकता नहीं है, तो आप शेल स्क्रिप्ट क्यों लिख रहे हैं? पर्ल बैश की तुलना में उपलब्ध होने की अधिक संभावना है।
sleep 1 while 0 != system qw(some command);
(जैसा कि ऊपर है, sleep
केवल तभी निष्पादित किया जाता है जब कमांड विफल हो।)