[Komenda jest ocena wyrażeń warunkowych. Tu nie ma sensu.
Ponieważ umountnie wypisuje niczego na standardowym wyjściu (błędy idą do stderr), `sudo umount mount`rozwija się do zera.
To jest jak:
while [ ]
do
sleep 0.1
done
[Poleceń, gdy nie przeszedł obok żadnego argumentu [i ]zwraca fałsz (exit status non-zero), więc nie wejdzie w pętlę.
Nawet gdyby umountwypisał swoje błędy na standardowe wyjście, użycie [polecenia nie miałoby sensu, ponieważ słowa wynikające z tego wyjścia nigdy nie tworzyłyby poprawnego wyrażenia warunkowego.
Tutaj chcesz:
until sudo umount mount
do
sleep 0.1
done
Oznacza to, że chcesz sprawdzić status wyjścia sudo / umount, a nie [polecenia.
Jeśli chcesz sprawdzić, czy umountwypisuje jakiś błąd lub ostrzeżenie na swoim stderr, to [może być przydatne. Jest -n "some-string"to wyrażenie warunkowe rozpoznawane przez [polecenie sprawdzające, czy "some-string"jest puste, czy nie, więc coś w stylu:
while [ -n "$(sudo umount mount 2>&1 > /dev/null)" ]; do
sleep 0.1
done
Ale szukanie komunikatów o błędach lub ostrzeżeniach jest ogólnie złym pomysłem. umount Komenda mówi nam, czy nie powiedzie się z jego kod wyjścia, który jest dużo bardziej niezawodny. Może się udać i nadal wyświetla komunikat ostrzegawczy. Może się nie powieść i nie wygenerować błędu (np. Kiedy zostanie zabity).
W tym konkretnym przypadku zwróć uwagę, że umountmoże się to nie powieść, ponieważ katalog nie jest podłączony, w takim przypadku zapętlasz się na zawsze, abyś mógł wypróbować inne podejście, takie jak:
while mountpoint -q mount && ! sudo umount mount; do
sleep 0.1
done
Lub jeśli „mount” może być zamontowany kilka razy i chcesz je wszystkie odmontować:
while mountpoint -q mount; do
sudo umount mount || sleep 0.1
done