我正在编写一个简单的 Bash 脚本,它只是调用 HadnBrakeCli 来渲染视频。我还实现了一个简单的队列选项:队列文件只存储它必须调用以启动渲染的行命令。所以我写了一个while循环来一次读取一行,eval $line 并重复直到文件结束。
if [[ ${QUEUE_MODE} = 'RUN' ]]; then
QUEUE_LEN=`cat ${CONFIG_DIR}/queue | wc -l`
QUEUE_POS='1'
printf "Queue lenght:\t ${QUEUE_LEN}\n"
while IFS= read line; do
echo "--Running render ${QUEUE_POS} on ${QUEUE_LEN}..."
echo "++" && echo "$line" && echo "++"
eval "${line}"
tail -n +2 "${CONFIG_DIR}/queue" > "${CONFIG_DIR}/queue.tmp" && mv "${CONFIG_DIR}/queue.tmp" "${CONFIG_DIR}/queue"
echo "--Render ended"
QUEUE_POS=`expr $QUEUE_POS + 1`
done < "${CONFIG_DIR}/queue"
exit 0
问题是任何命令都可以使循环正常工作(空行,回显“测试”......),但是一旦加载了正确的渲染,它就会正确启动并完成,但循环也存在。
我是新手,所以我尝试了一些小改动来看看我得到了什么效果,但没有改变结果。我评论了命令,或者我在 while 循环中tail -n +2 "${CONFIG_DIR}/queue" > "${CONFIG_DIR}/queue.tmp" && mv "${CONFIG_DIR}/queue.tmp" "${CONFIG_DIR}/queue"
添加/删除了,或者删除了in命令。对不起,如果这个问题是微不足道的,但我真的错过了它如何工作的一些主要部分,所以我什至不知道如何搜索解决方案。IFS=
-r
read
我将在队列文件中放置一个通用渲染示例。
HandBrakeCLI -i "/home/andrea/Videos/done/Rap dottor male e mini me.mp4" -o "/hdd/Render/Output/Rap dottor male e mini me.mkv" -e x265 -q 23 --encoder-preset faster --all-audio -E av_aac -6 dpl2 --all-subtitles -x pmode:pools='16' --verbose=0 2>/dev/null