[आदेश सशर्त भाव मूल्यांकन करना है। इसका यहां कोई फायदा नहीं है।
क्योंकि umountइसके मानक आउटपुट पर कुछ भी आउटपुट नहीं होता है (त्रुटियाँ stderr पर जाती हैं), `sudo umount mount`कुछ भी नहीं फैलता है।
तो यह इस तरह है:
while [ ]
do
sleep 0.1
done
[आदेश, जब बगल में किसी भी तर्क पारित नहीं किया [और ]रिटर्न झूठी (एक गैर शून्य बाहर निकलने की स्थिति) है, तो आप पाश में प्रवेश नहीं करेगा।
यहां तक कि अगर umountस्टडआउट पर इसकी त्रुटियों का उत्पादन किया गया था, तो [कमांड का उपयोग करने का कोई मतलब नहीं होगा, क्योंकि उस आउटपुट के परिणामस्वरूप शब्द कभी भी एक वैध सशर्त अभिव्यक्ति नहीं बना सकते हैं।
यहाँ आप चाहते हैं:
until sudo umount mount
do
sleep 0.1
done
यही है, आप sudo / umount की निकास स्थिति की जांच करना चाहते हैं, [कमांड की नहीं।
यदि आप यह जाँचना चाहते हैं कि क्या umountआउटपुट में कोई त्रुटि या चेतावनी है, [तो यह उपयोगी हो सकता है। -n "some-string"एक सशर्त द्वारा मान्यता प्राप्त अभिव्यक्ति है [परीक्षण करने के लिए आदेश है कि क्या "some-string"खाली है या नहीं, कुछ की तरह तो:
while [ -n "$(sudo umount mount 2>&1 > /dev/null)" ]; do
sleep 0.1
done
लेकिन त्रुटि या चेतावनी संदेशों की उपस्थिति की तलाश आमतौर पर एक बुरा विचार है। umount आदेश हमें बताता है या नहीं, यह अपने से बाहर निकलें कोड, और अधिक विश्वसनीय है कि के साथ सफल होता है। यह सफल हो सकता है और फिर भी कुछ चेतावनी संदेश का उत्पादन कर सकता है। यह विफल हो सकता है और त्रुटि को आउटपुट नहीं कर सकता (जैसे कि जब यह मारा जाता है)।
इस विशेष मामले में, ध्यान दें कि umountविफल हो सकता है क्योंकि निर्देशिका माउंट नहीं है, और आप उस मामले में हमेशा के लिए लूप करेंगे, इसलिए आप अपना दृष्टिकोण आज़मा सकते हैं:
while mountpoint -q mount && ! sudo umount mount; do
sleep 0.1
done
या यदि "माउंट" कई बार लगाया जा सकता है और आप उन सभी को अनमाउंट करना चाहते हैं:
while mountpoint -q mount; do
sudo umount mount || sleep 0.1
done