Тот факт, что вы используете df с grep, говорит мне, что вы отфильтровываете вывод df, пока какое-то устройство не подключится к определенному каталогу, то есть, находится ли он в списке.
Вместо фильтрации фокуса списка в нужном каталоге. К счастью для нас, утилита mountpoint позволяет нам делать именно это и позволяет иметь дело с статусом выхода этой команды. Рассмотрим это:
$ mountpoint /mnt/HDD/
/mnt/HDD/ is a mountpoint
$ echo $?
0
$ mountpoint ~
/home/xieerqi is not a mountpoint
$ echo $?
1
Таким образом, ваш сценарий можно переписать как
while ! mountput /toBeMounted > /dev/null
do
sleep 3
done
echo "Yup, /toBeMounted got mounted!"
Пример прогона с моим собственным диском:
$ while ! mountpoint /mnt/HDD > /dev/null
> do
> echo "Waiting"
> sleep 1
> done && echo "/mnt/HDD is mounted"
Waiting
Waiting
Waiting
Waiting
Waiting
/mnt/HDD is mounted
На вы можете довольно легко реализовать свою собственную версию команды mountpoint, например, в python, как и я:
#!/usr/bin/env python3
from os import path
import sys
def main():
if not sys.argv[1]:
print('Missing a path')
sys.exit(1)
full_path = path.realpath(sys.argv[1])
with open('/proc/self/mounts') as mounts:
print
for line in mounts:
if full_path in line:
print(full_path,' is mountpoint')
sys.exit(0)
print(full_path,' is not a mountpoint')
sys.exit(1)
if __name__ == '__main__':
main()
Пример прогона:
$ python3 ./is_mountpoint.py /mnt/HDD
/mnt/HDD is mountpoint
$ python3 ./is_mountpoint.py ~
/home/xieerqi is not a mountpoint