[
Команда для оцінки умовних виразів. Тут нічого не потрібно.
Оскільки umount
на стандартному виході нічого не виводиться (помилки йдуть до stderr), `sudo umount mount`
розширюється до нічого.
Так це:
while [ ]
do
sleep 0.1
done
[
Команда, коли не передається ніяких аргументів поруч [
і ]
повертає брехня (стан виходу не нуль), так що ви не ввійдете в петлю.
Навіть якби umount
виводив свої помилки на stdout, використання [
команди не мало б сенсу, оскільки слова, отримані в результаті цього виводу, ніколи не склали б дійсного умовного вираження.
Тут ви хочете:
until sudo umount mount
do
sleep 0.1
done
Тобто ви хочете перевірити статус виходу sudo / umount, а не [
команди.
Якщо ви хочете перевірити, чи umount
виводить якусь помилку чи попередження на її stderr, саме тут [
міг би бути корисним. Це -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
Або якщо "mount" може бути встановлений кілька разів, і ви хочете їх відключити:
while mountpoint -q mount; do
sudo umount mount || sleep 0.1
done