等待bash脚本直到复制完成

时间:2014-01-26 14:13:29

标签: linux bash shell

我正在试验我的覆盆子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来避免任何权限错误。

出了什么问题? :)

1 个答案:

答案 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的调用将阻止,直到复制实际完成为止。因此根本原因必须是别的。