我如何在 .profile 脚本中等待,直到所有设备都安装完毕?

我如何在 .profile 脚本中等待,直到所有设备都安装完毕?

在我的.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 秒检查一次设备是否已安装。如果/当脚本发现设备已安装时,它会设置环境变量并结束。

相关内容