用于图像列表刷新的幻灯片放映的Bash脚本

用于图像列表刷新的幻灯片放映的Bash脚本,bash,shell,slideshow,watch,inotify,Bash,Shell,Slideshow,Watch,Inotify,我正在用fbifbi为幻灯片编写一个简短的脚本。为了完整起见,脚本在Ubuntu机器上自动登录后执行,该机器应无头运行;仅限计算机的外部接口应该是一个Samba文件夹,我在其中添加/删除图像。 我开始很容易: usr/bin/fbi -noverbose -a -t 4 -u `find -type f | egrep -i "(jpg|bmp|png|gif)$"` 这很好:find/egrep返回一个文件列表,fbi每隔4秒显示一次。 现在,我需要在添加新图像或删除现有图像时刷新幻灯片列表

我正在用fbi
fbi
为幻灯片编写一个简短的脚本。为了完整起见,脚本在Ubuntu机器上自动登录后执行,该机器应无头运行;仅限计算机的外部接口应该是一个Samba文件夹,我在其中添加/删除图像。 我开始很容易:

usr/bin/fbi -noverbose -a -t 4 -u `find -type f | egrep -i "(jpg|bmp|png|gif)$"`
这很好:
find
/
egrep
返回一个文件列表,
fbi
每隔4秒显示一次。 现在,我需要在添加新图像或删除现有图像时刷新幻灯片列表。我试着观看,但没有成功

如果我从命令行执行此命令:

watch -n 300 -t `find -type f | egrep -i "(jpg|bmp|png|gif)$"`
我得到了相同的文件列表,每当我向目标文件夹添加图像时,该列表都会在接下来的5分钟内更新。好的但当我将此添加到脚本中时,没有任何效果:

/usr/bin/fbi -noverbose -a -t 4 -u `watch -n 300 -t 'find -type f | egrep -i "(jpg|bmp|png|gif)$"'`
这样,我什么也得不到,当我中断幻灯片放映时,我的命令行就坏了(没有回车,没有键入echo…)

我做错了什么/忽略了什么/错过了什么?还是我完全偏离了目标

因为另一个解决方案是有两个脚本,幻灯片的一个脚本和一个控制器脚本(可能使用inotify工具),在修改目标文件夹时终止并重新启动幻灯片脚本

任何建议或提示,Veeery感谢

鲁莽*

因为您使用了backticks,所以这是在将文件名列表传递给
watch
,我怀疑您不想这样做也许这会起作用,但我没有任何方法来测试:

watch -n 300 -t '/usr/bin/fbi -noverbose -a -t 4 -u `find -type f | egrep -i "(jpg|bmp|png|gif)$"`'
尽管这带来了一个棘手的问题,即几天后将运行多少份《联邦调查局》

您最好的选择可能是设置一个cron作业,以便每x分钟运行一个这样的脚本:

我没有使用
find
grep
,而是使用了
bash
,它对带有空格的文件名是安全的,还可以让您不用运行另外两个命令!这需要bash4+作为提供递归匹配的globstar选项


globbing在数组中为您提供文件名,该文件名直接传递给
fbi
,如
中所述,watch
对于脚本来说看起来不太好,我认为您应该使用
while
循环和
sleep
command@golimar:是的,谢谢,一个朋友已经警告我手表不适合脚本。。。我真的是一个bash新手…非常感谢!我选择了你的答案,因为这不仅解决了我的问题,还带来了一些额外的问题(比如:我还没有解决类似win的文件名的问题,globstar非常出色地解决了这些问题,所以我还学到了一件额外的事情……)。再次非常感谢!我想发布我的最终解决方案,它从你的答案开始,并以此为基础,解决了一个棘手的问题(至少对我来说是棘手的)。正确的方法是什么?如果我的问题太长,无法加入评论,你可以编辑我的问题来添加你的内容。
watch -n 300 -t '/usr/bin/fbi -noverbose -a -t 4 -u `find -type f | egrep -i "(jpg|bmp|png|gif)$"`'
#!/bin/bash
pkill -f /usr/bin/fbi
shopt globstar
cd /your/images/directory
files=(**/*.jpg **/*.bmp **/*.png **/*.gif)
usr/bin/fbi -noverbose -a -t 4 -u "${files[@]}"