【发布时间】:2019-11-14 03:30:29
【问题描述】:
我已经用谷歌搜索这个问题几个小时了,以前从未遇到过。我有一个脚本,可以为我的公司 PRN 的教学视频创建缩略图 gif。当我运行它时,shell 有时会省略一半的文件路径,因此会失败。
这是在 debian 9 机器 (bash) 上。我尝试了很多方法来编写循环,包括管道到文件(结果正确),然后将其读回循环(然后混合我的输出)。我已经尝试从脚本的第一行设置 -x ,它似乎肯定是 shell 本身的问题。结果也各不相同。有时我输入一个文件并得到 30 个字符,有时它只读取 22 个字符,但失败的总是相同的文件。 od -xa 之间没有显示错误字符。
这是我当前的循环开始,也是事情开始失败的地方,所以我不会费心发布其余部分。
PPATH="/home/pi/pmount/prntest"
find "$PPATH" -type f -iname "*.mp4" >tempfile
cat -v tempfile | while read i
do
makethumbs "$i"
echo "$i" >>test.txt
done
例如文件的路径是/home/pi/pmount/prntest/Security Training/Example #1.mp4
示例输出:
/prntest/Security Training/Example #1.mp4
或
urity Training/Example #1.mp4`
当然无法解析。有任何想法吗?我将不胜感激。
编辑:
所需信息:
Shell: /bin/bash
GNU bash, Version 4.4.12(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2016 Free Software Foundation, Inc.
Linux 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) ```
【问题讨论】:
-
你的拍子里有空格。尝试不使用 tmpfile,例如
find ...| while IFS= read -r ; do -
您好,感谢您的快速回答,但这不是解决方案。正如您在示例输出中看到的那样,它有时会在单词中间截断内容。许多带有空格的文件都运行良好。
-
如果你做
find "$PPATH" -type f -name '*.mp4' | while read i; do echo "$i"; done你有正确的值,我看不出有什么问题 -
不知道是
makethumbscmd 失败还是echo "$i"。请将其归结为echo "/home/pi/pmount/prntest/Security Training/Example #1.mp4" | makethumbs或只是echo "/home/pi/pmount/prntest/Security Training/Example #1.mp4" >> test.txt。您最近是否清理了test.txt文件,您没有查看第一次交互错误输出,请检查文件底部,或> test.txt将其归零。我认为您将不得不为您的示例记录发布od -xa输出。 .... -
嗯.. 另外,请告诉我们
echo $SHELL和eval $SHELL --version。和uname -srv。好第一Q!你显然已经投入了研究!继续发帖,祝你好运。
标签: bash loops scripting filepath