读取循环时只执行一次Shell脚本

前端之家收集整理的这篇文章主要介绍了读取循环时只执行一次Shell脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个shell脚本,通过 Handbrake从我的相机批处理.mov文件以节省高清空间.该脚本使用’find’搜索目录,然后在找到的每个.mov文件上运行Handbrake,将生成文件的创建日期与源文件的日期匹配为’touch’.

我最初使用for循环执行此操作:

for i in $(find "$*" -iname '*.mov') ; do
  ~/Unix/HandbrakeCLI --input "$i" --output "$i".mp4 --preset="Normal"
  touch -r "$i" "$i".mp4
done

这有效,但如果输入文件文件名中有空格,则会失败.所以我尝试了一个while循环:

find "$*" -iname '*.mov' | while read i ; do
  ~/Unix/HandbrakeCLI --input "$i" --output "$i".mp4 --preset="Normal"
  touch -r "$i" "$i".mp4
done

这个循环的问题是它适用于目录中的第一个文件,然后退出循环.请注意,如果我在while循环体中替换“echo $i”,它会打印目录中的所有.mov文件,因此循环结构正确.

我相信在this stackoverflow thread我的问题有一个部分答案.但是解决方案是特定于ssh并不能解决一般问题.似乎与子进程使用的stdin有关,但我不完全理解它是如何工作的.

任何建议?

我在OSX 10.6上

你可能正在运行shellopt’-e'(退出错误)

尝试

set +e

猜你在找的Bash相关文章