The [
perintah untuk mengevaluasi ekspresi kondisional. Tidak ada gunanya di sini.
Karena umount
tidak menampilkan apa pun pada output standarnya (kesalahan mengarah ke stderr), `sudo umount mount`
tidak akan berkembang.
Jadi seperti:
while [ ]
do
sleep 0.1
done
The [
perintah, bila tidak lulus argumen samping [
dan ]
kembali palsu (status exit non-nol), sehingga Anda tidak akan masuk loop.
Bahkan jika umount
memiliki output kesalahannya di stdout, menggunakan [
perintah tidak akan masuk akal, karena kata-kata yang dihasilkan dari output itu tidak akan pernah membuat ekspresi kondisional yang valid.
Di sini Anda ingin:
until sudo umount mount
do
sleep 0.1
done
Artinya, Anda ingin memeriksa status keluar dari sudo / umount, bukan dari [
perintah.
Jika Anda ingin memeriksa apakah umount
ada kesalahan atau peringatan pada stderrnya, di situlah [
bisa berguna. Ini -n "some-string"
adalah ekspresi kondisional yang dikenali oleh [
perintah untuk menguji apakah "some-string"
kosong atau tidak, jadi sesuatu seperti:
while [ -n "$(sudo umount mount 2>&1 > /dev/null)" ]; do
sleep 0.1
done
Namun mencari keberadaan pesan kesalahan atau peringatan pada umumnya adalah ide yang buruk. The umount
perintah memberitahu kita apakah atau tidak berhasil dengan kode keluar nya, itu jauh lebih dapat diandalkan. Itu bisa berhasil dan masih menampilkan beberapa pesan peringatan. Itu bisa gagal dan tidak menghasilkan kesalahan (seperti ketika itu terbunuh).
Dalam kasus khusus ini, perhatikan bahwa umount
mungkin gagal karena direktori tidak di-mount, dan Anda akan mengulang selamanya dalam kasus itu, sehingga Anda bisa mencoba pendekatan lain seperti:
while mountpoint -q mount && ! sudo umount mount; do
sleep 0.1
done
Atau jika "mount" mungkin dipasang beberapa kali dan Anda ingin meng-unmount semuanya:
while mountpoint -q mount; do
sudo umount mount || sleep 0.1
done
[
,[[
atau tidak. Saya berharap halaman manual khas, contoh GNU dan / atau TLDP tentang persyaratan bash mencakup detail seperti itufungsi dapat digunakan kembali, dan akan habis dalam 'n' detik
tidak perlu tidur
sumber
[[...]]
adalahksh
/bash
/zsh
spesifik, yang semuanya memiliki$SECONDS
variabel khusus, sehingga Anda dapat melakukan:SECONDS=0; until umount... || ((SECONDS > $1)); do..
mount remount,ro
perintah pada perangkat mips mengumumkan 2009 dengan stik USB Intenso Micro Line dapat memakan waktu 23 atau bahkan 30+ detik untuk menyelesaikannya.