[
Komut koşullu ifadeleri değerlendirmektir. Burada faydası yok.
Çünkü umount
standart çıktısında herhangi bir şey çıkarmaz (hatalar stderr'e gider), `sudo umount mount`
hiçbir şeye genişlemez.
Yani şöyle:
while [ ]
do
sleep 0.1
done
[
Komut, yanında herhangi bir argüman geçmedi zaman [
ve ]
döner sahte döngü girmeyecektir (sıfır olmayan bir çıkış durumu), bu yüzden.
umount
Stdout'taki hatalarını çıkarmış olsanız bile , [
komutu kullanmak mantıklı olmazdı, çünkü bu çıktıdan çıkan kelimeler hiçbir zaman geçerli bir koşullu ifade oluşturmazdı.
İşte istiyorsun:
until sudo umount mount
do
sleep 0.1
done
Başka bir deyişle, sudo / umount [
komutunun değil çıkış durumunu kontrol etmek istiyorsunuz .
Eğer umount
stderr üzerinde herhangi bir hata veya uyarı çıktısı olup olmadığını kontrol etmek istiyorsanız , orası [
yararlı olabilir. -n "some-string"
Tarafından tanınan şartlı ifadedir [
olmadığını test etmek için komutun "some-string"
, boş veya bir şey değil gibi pek:
while [ -n "$(sudo umount mount 2>&1 > /dev/null)" ]; do
sleep 0.1
done
Ancak hata veya uyarı mesajlarının varlığını aramak genellikle kötü bir fikirdir. umount
Komut çok daha güvenilirdir onun çıkış kodu ile başarılı olsun veya olmasın söyler. Başarılı olabilir ve hala bazı uyarı mesajları verebilir. Başarısız olabilir ve bir hataya neden olmaz (öldürüldüğü gibi).
Bu özel durumda, umount
dizin takılı olmadığından ve bu durumda sonsuza kadar döngü oluşturduğunuzdan başarısız olabileceğine dikkat edin , böylece şöyle bir başka yaklaşım deneyebilirsiniz:
while mountpoint -q mount && ! sudo umount mount; do
sleep 0.1
done
Veya "mount" birkaç kez monte edilmişse ve hepsini çıkarmak istiyorsanız:
while mountpoint -q mount; do
sudo umount mount || sleep 0.1
done