从 bash 调用 .bat 终止循环

从 bash 调用 .bat 终止循环

我遇到了一个对我来说极其奇怪的问题。

我有一个循环逐行读取文件,如下所示:

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

无论出于什么原因,如果您在另一个批处理文件中执行批处理文件而没有调用语句,则外部批处理文件将被终止。我不知道为什么默认行为是可取的。

相关内容