我正在我的覆盆子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来避免任何权限错误。
问题在哪里?:)
您可以尝试吗?
...
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为1退出。在后一种情况下,错误字符串被打印到标准错误。
sudo
真的没有任何密码的人输入吗?
至于您的问题
当脚本完成执行时,如果正在进行进行复制过程?
cp
的调用将阻塞,直到复制实际完成。因此根本原因必须是其他原因。