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