1

У меня проблема, которая очень странная для меня.

У меня есть цикл, который читает файл строка за строкой, которая выглядит примерно так:

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

Я вызываю файл .bat в вложенной оболочке, поэтому он не должен влиять ни на одну из моих переменных. Это выглядит примерно так:

  $(CMD /c c.bat -c "$SCR_DIR/prepsdk.sh Build $apppath")

Странно то, что bat-файл как-то прерывает мои циклы. То есть я увижу следующий вывод:

Начало вывода цикла из .bat Конец цикла вне цикла

Если закомментирован вызов .bat, я вижу

Начало цикла Конец цикла Начало цикла Конец цикла ..... Начало петли Конец петли снаружи петли

Таким образом, поведение соответствует ожидаемому, поскольку файл .bat не вызывается. Что может делать файл .bat, что приводит к такому завершению цикла? Он не изменяет файл $ MANIFEST, я в этом убедился.

2 ответа2

2

Пакетный файл может потреблять оставшиеся данные из файла $MANIFEST , что приводит к сбою следующего выполнения read line когда он видит EOF.

0

Попробуйте выполнить командный файл с помощью call foo.bat.

По какой-либо причине, если вы выполняете пакетный файл внутри другого пакетного файла без оператора вызова, внешний пакетный файл завершается. Я не знаю, почему поведение по умолчанию было когда-либо желательно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .