[
คำสั่งคือการประเมินการแสดงออกเงื่อนไข มันไม่มีประโยชน์อะไรที่นี่
เนื่องจาก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