我正在试验我的覆盆子pi,我想在任何USB设备插入我的pi时运行bash脚本。对于自动挂载USB设备,我使用的是usbmount
。我创建了一个udev规则,只要插入USB,它就会在/usr/local/bin/script.sh上运行shell脚本。 shell脚本的内容是:
#!/bin/sh
echo "Device plugged" >> /tmp/test.log
sudo echo 1 > /sys/class/leds/led0/brightness
sudo mkdir /home/pi/usbdata
sleep 5
sudo cp -r /media/usb0/* /home/pi/usbdata/
//I have to wait until the copying finishes
sudo echo 0 > /sys/class/leds/led0/brightness
插入USB时我观察到的是,OK LED亮起,等待5秒钟,然后熄灭,表示脚本已完成执行。创建了文件夹/home/pi/usbdata
,但没有任何内容复制到它。当脚本完成执行时,复制过程是否会在正在进行时中止?为什么文件没有被复制?我确保USB仅在/media/usb0/
安装,我使用sudo来避免任何权限错误。
出了什么问题? :)
答案 0 :(得分:0)
你能试试吗?
...
sleep 5
fn=/tmp/usb-`date +%H%M%S`.txt
ls -l /media/usb0/ > $fn
sudo cp -r /media/usb0/* /home/pi/usbdata/ >> $fn 2>&1
rc=$?
if [ $rc != 0 ]; then
echo "Error: $rc" >> $fn
fi
...
man 8 sudo
读到:
成功执行程序后,sudo的退出状态将只是已执行程序的退出状态。
否则,如果存在配置/权限问题或者sudo无法执行给定命令,则sudo将以值1退出。在后一种情况下,错误字符串将打印到标准错误。
sudo
真的在没有人工输入任何密码的情况下运行吗?
关于你的问题
当脚本完成执行时,复制过程是否会在正在进行时中止?
cp
的调用将阻止,直到复制实际完成为止。因此根本原因必须是别的。