【发布时间】:2014-04-30 10:40:36
【问题描述】:
我正在终端内运行一个命令,该命令通过一个目录检查媒体文件,然后从这些文件中提取隐藏式字幕数据。不幸的是,即使不存在隐藏式字幕数据,程序仍会处理整个文件,这可能需要很长时间。我想做的是在 60 秒后检查输出并查找数据,如果文件为空,则终止进程并转到下一个文件。
我的旧命令如下
for i in */*.vob
do
/home/me/ccextractor/linux/ccextractor -out=srt -utf8 -trim "$i"
done
我一直在尝试使用sleep,但我似乎无法让它工作。有什么建议吗?
解决方案
在以下答案的帮助下(也请注意 cmets),我的最终工作代码是:
for i in */*.vob
do
/home/me/ccextractor/linux/ccextractor -out=srt -utf8 -trim "$i" &
pid=$!
sleep 15
srtfile=$(expr "${i}" | sed -r 's/.{4}$//')
fgrep -q "1" "${srtfile}.srt" || kill $pid
wait $pid
done
【问题讨论】:
-
也许寻找
timeout而不是sleep,请参阅this。此外,考虑将您的单行代码重写为常规 bash 脚本,以提高问题的可读性。 -
感谢 BroSlow 的建议。我还更新了格式以帮助其他人在未来阅读问题和解决方案。
标签: bash shell command-line terminal