所以我有一个播放器脚本“player.sh”和一个更新程序脚本“updater.sh”。
player.sh 使用通配符 *.mp3 播放 /home/filepath/ 中的任何 mp3 文件,一切如预期工作。
我想要的是让 updater.sh 休眠 15 秒,然后将 USB 驱动器“sda1”挂载到 /media/pi,然后检查 /media/pi 中的 *.mp3 是否比 home/filepath/ 中的 *.mp3 更新
如果文件较新,它会终止 mp3 播放,使用 RM 从 /home/filepath/ 中清除所有 *.mp3,将较新的 *.mp3 复制到 /home/filepath/,然后再次启动 player.sh 来播放新文件。
然而,它并没有这样做......
#!/bin/bash
while [ 1 ] ; do
sleep 15
sudo mount /dev/sda1 /media/pi
if [[ /media/pi/*.mp3 -nt /home/filepath/*.mp3 ]] ; then sudo pkill mpg123 & sudo rm /home/filepath/* & cp /media/pi/*.mp3 /home/filepath/ & sh /home/filepath/player.sh & echo "updated"
else echo "not updated"
fi
sudo amount -l /media/pi
done
我只是看到终端里全是“未更新”。
无论我做什么,脚本都认为文件具有相同的修改日期,但我已经使用“stat”检查了文件,修改日期相隔几个小时。
有任何想法吗?
谢谢!
答案1
如果你说类似的话[[ /dir1/* -nt /dir2/* ]]
,shell 会将其展开为
[[ /dir1/f1 /dir1/f3 … -nt /dir2/f2 /dir2/f3 … ]]
如果每个目录中只有一个文件,则应该工作不稳定。否则,该命令就是无意义的,并且会失败。
-nt
一次只需对两个文件使用。你可能想这样做
for b in /home/filepath/*.mp3
do
b_base="${b##*/}"
if [[ /media/pi/"b_base" -nt "$b" ]] ; then (do something) …
︙
此外,您正在使用&
应该使用的地方&&
。