我试图创建一些udev规则来挂载和卸载USB闪存驱动器;目前的规则非常简单:
ACTION=="add",KERNEL=="sd[b-z]",RUN+="/root/scripts/plug_flash_drive.sh %k"
ACTION=="remove",KERNEL=="sd[b-z]",RUN+="/root/scripts/unplug_flash_drive.sh %k"
plug_flash_drive.sh也非常简单:
device_name=$1
mount_options="umask=000,utf8"
if [ ! -e "/media/$device_name" ]; then
mkdir "/media/$device_name"
fi
sleep 1
/usr/bin/mount "/dev/$device_name" "/media/$device_name" -o "$mount_options"
unplug_flash_drive.sh:
device_name=$1
umount "/dev/$device_name"
rmdir "/media/$device_name"
我已经做了一些测试,所以我可以确定:
- 插入后,将检测到我的闪存驱动器;在/ dev中创建一个文件
- 通过udev调用plug_flash_drive.sh
- 脚本的mkdir部分起作用
- 但是,脚本的“挂载”部分似乎未执行,因此未挂载我的驱动器
- 当我在命令行上调用脚本时,它们可以正常工作
有人知道udev调用时为什么不执行mount吗?
编辑28/08/14:我在脚本的末尾添加了“ grep -q / proc / mounts &&回声成功||回声失败”,以在调试日志中检查调试脚本是否在脚本结束之前实际挂载了设备。即使在udev调用脚本的情况下,设备似乎已安装在该位置。因此,真正的问题是“通过udev调用安装脚本后,我的块设备似乎已卸载”:s
set -xv
与exec >> "$HOME"/mount.log 2>&1
入.sh
文件?
mkdir "$mount_dir"
不过rmdir "/media/$device_name"
?在哪里$mount_dir
设置?