bash脚本循环调用mkvdts2ac3.sh仅执行一次的问题求助
问题原因
mkvdts2ac3.sh脚本执行时会读取标准输入(stdin),而你的while循环依赖stdin从tracks_info.txt读取内容。两者共用同一个stdin流,导致脚本执行时会耗尽剩余的文件内容,循环中的read命令只能读到第一行就提前遇到EOF,循环直接终止。
解决方案
有两种可靠的修复方式:
方式1:重定向脚本的标准输入
直接将mkvdts2ac3.sh的stdin重定向到/dev/null,让它不再读取循环依赖的输入流:
while IFS=: read -r track_id language; do echo "Extraction de la piste $track_id avec la langue $language" bash "$mkvdts2ac3_path"/mkvdts2ac3.sh -f -t $track_id -v $merged_file < /dev/null || continue sleep 5 done < "tracks_info.txt"
方式2:使用独立文件描述符读取列表
将tracks_info.txt绑定到独立的文件描述符(比如fd 3),让循环从这个独立通道读取内容,避免和脚本的stdin冲突:
while IFS=: read -r track_id language <&3; do echo "Extraction de la piste $track_id avec la langue $language" bash "$mkvdts2ac3_path"/mkvdts2ac3.sh -f -t $track_id -v $merged_file || continue sleep 5 done 3< "tracks_info.txt"
两种方式都能确保循环完整遍历tracks_info.txt中的所有音轨条目,不会被脚本的输入操作打断。
内容的提问来源于stack exchange,提问作者xaviercunego
相关产品推荐
相关产品推荐

