在我的.profile
脚本中我想导出一个变量如果安装了外部 USB 硬盘。我需要在后面的 Perl 脚本中使用此变量来确定设备是否已安装。特别是,如果未安装该设备,后面的脚本会表现不同。
由于这些 Perl 脚本也在 Windows 环境中运行,因此我无法在脚本运行时简单地检查目录是否存在。此外,脚本在不同的机器上运行,其中一些有时已连接硬盘。连接硬盘后,除非机器关闭,否则不会将其移除。
此外,脚本完美地完成了它们的工作,我宁愿不改变它们。
该设备被挂载至/media/rene/DEVICE_NAME
。
在我的主目录中,我有一个指向挂载点的符号链接:
ln -s /media/rene/DEVICE_NAME ~/ext_hd
因此,在我的~/.script
文件中,我有以下测试
if [[ -d ~/ext_hd ]]; then
export device_mounted=yes
fi
现在,显然这些行已经执行前mount 进程已完成外部硬盘的挂载。因此,该变量device_mounted
未赋值。
那么,有没有办法等待挂载过程完成后再执行测试?
答案1
如何将脚本作为守护进程运行?
#!/bin/sh
while true; do
if mountpoint -q /media/rene/DEVICE_NAME; then
export device_mounted=yes
else
unset device_mounted
fi
sleep 30
done
编辑:
通过澄清您编辑的问题,我们可以稍微简化脚本:
#!/bin/sh
while true; do
if mountpoint -q /media/rene/DEVICE_NAME; then
export device_mounted=yes
break
fi
sleep 30
done
将其保存为例如某处device-check.sh
并使脚本可执行:
chmod +x /path/to/device-check.sh
然后添加此行~/.profile
:
/path/to/device-check.sh &
尾随&
字符至关重要。它使脚本作为单独的进程启动,从而允许登录过程继续。
此后,脚本会在登录时启动,每 30 秒检查一次设备是否已安装。如果/当脚本发现设备已安装时,它会设置环境变量并结束。