我有一个 bash 脚本文件,在其中执行一堆命令。
#!/bin/bash
umount /media/hdd1
umount /media/hdd2
something1
something2
但由于文件后面的命令与已卸载的硬盘一起工作,因此我需要确保卸载成功后才能继续。
我当然可以检查卸载是否失败并退出 1,但这并不理想。
所以基本上,我想要做的是以某种方式让 umount 命令等待,直到设备不忙,然后卸载 HDD 并继续执行脚本。
因此它的工作原理如下:
#!/bin/bash
umount /media/hdd1 # Device umounted without any problems continuing the script..
umount /media/hdd2 # Device is busy! Let's just sit around and wait until it isn't... let's say 5 minutes later whatever was accessing that HDD isn't anymore and the umount umounts the HDD and the script continues
something1
something2
谢谢。
答案1
我认为以下脚本可以完成这项工作。它应该以sudo
(超级用户权限)运行。
有一个带循环doer
的函数while
,它检查mountpoint
设备是否安装在指定的挂载点,如果是,则尝试用 卸载它umount
。当逻辑变量busy
为假时,while
循环结束,脚本可以开始“做一些事情”。
#!/bin/bash
function doer() {
busy=true
while $busy
do
if mountpoint -q "$1"
then
umount "$1" 2> /dev/null
if [ $? -eq 0 ]
then
busy=false # umount successful
else
echo -n '.' # output to show that the script is alive
sleep 5 # 5 seconds for testing, modify to 300 seconds later on
fi
else
busy=false # not mounted
fi
done
}
########################
# main
########################
doer /media/hdd1
doer /media/hdd2
echo ''
echo 'doing something1'
echo 'doing something2'