我目前正试图挂载任何连接到我的电脑的usb驱动automaticaly。 我的目标是安装usb设备,如果他们有一个或uuid,如果他们没有。从udev规则和shell脚本自动挂载usb驱动器
要做到这一点我写/etc/udev/rules.d/10-usb-detect.rules udev规则:
ACTION=="add", KERNEL=="sd?[0-9]", SUBSYSTEM=="block", RUN+="/usr/local/bin/add.sh"
该脚本每次呼吁块子系统add事件追加。
udev规则工作正常,但是当我尝试从脚本中挂载文件系统不起作用时。 奇怪的是,脚本中的mount命令总是返回$?= 0,因此逻辑上文件系统应该被挂载,但不是。
这里是我的脚本:
#!/bin/bash
LOG_FILE=<path_to_file>
echo "New usb device detected at $DEVNAME" >> $LOG_FILE
echo "mount $DEVNAME /media/usb/test" >> $LOG_FILE
mount $DEVNAME /media/usb/test &>> $LOG_FILE
ret=$?
echo "$ret" >> $LOG_FILE
if [ $ret == "0" ]; then
echo "$DEVNAME mounted at /media/usb/test" >> $LOG_FILE
else
echo "Failed to mount $DEVNAME at /media/usb/test" >> $LOG_FILE
fi
echo "" >> $LOG_FILE
我试着用/媒体/ USB /测试不存在的,我有mount命令预期的错误。 但是,当文件夹存在时,即使文件系统未安装,mount命令也会返回0。
这里是日志文件的输出:
New usb device detected at /dev/sdc1
mount /dev/sdc1 /media/usb/test
mount: mount point /media/usb/test does not exist
32
Failed to mount /dev/sdc1 at /media/usb/test
New usb device detected at /dev/sdc1
mount /dev/sdc1 /media/usb/test
0
/dev/sdc1 mounted at /media/usb/test
的/ dev/SDC1没有被安装,即使安装返回0
我精确,当我从命令行挂载文件系统,绝对没有问题,并且文件系统按照它应该安装。
有人对我如何调试这件事有线索吗?
我认为这个问题是因为从udev调用脚本,因为如果我从命令行调用它,它也可以。
嗨, 它没有使用-t类型选项改变任何东西。 无论如何,感谢您的推荐,我不知道这个技巧来记录脚本输出;) – Arkaik
我做到了,但没有任何改变。 “-eq”比“==”好吗? 我还添加了-v选项来挂载命令,它说:mount:/ dev/sdj1挂载在/ media/usb/test上。 此外,每当usb密钥再次插入时,/ dev/sdx字母会递增,我认为它不应该是因为它们没有以前面的字母装入 – Arkaik
-eq用于数字比较。看起来很奇怪。我也在同样的几个月前,并没有面临任何问题。最令人惊讶的部分是为什么你的设备没有被安装 - 尽管mount命令返回0. 你能重新启动系统并再次尝试它并在这里发布日志。否则看起来你需要在这方面的专家建议。 – user7345878