我遇到了一个对我来说极其奇怪的问题。
我有一个循环逐行读取文件,如下所示:
while read line; do
echo "Beginning of loop"
## Call to function that executes .bat file
echo "End of loop"
done < $MANIFEST
echo Outside of Loop
我在子 shell 中调用 .bat 文件,因此它不会影响我的任何变量。它看起来像这样:
$(CMD /c c.bat -c "$SCR_DIR/prepsdk.sh Build $apppath")
奇怪的是,bat 文件以某种方式终止了我的循环。这意味着我将看到以下输出:
循环开始 .bat 的输出 循环结束 循环外部
如果对 .bat 的调用被注释掉,我会看到
循环开始 循环结束 循环开始 循环结束 ..... 循环开始 循环结束 循环外部
因此,行为符合预期,.bat 文件未被调用。.bat 文件可能在做什么导致循环像这样终止?它没有修改 $MANIFEST 文件,我确定了这一点。
答案1
批处理文件可能会消耗文件中的其余数据,当看到EOF时,$MANIFEST
下一次执行将会失败。read line
答案2
尝试使用以下方法执行批处理文件call foo.bat
。
无论出于什么原因,如果您在另一个批处理文件中执行批处理文件而没有调用语句,则外部批处理文件将被终止。我不知道为什么默认行为是可取的。