You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:30:57