O arquivo em lote pode estar consumindo o restante dos dados do arquivo $MANIFEST
, deixando a próxima execução de read line
falhar quando vir EOF.
Estou tendo um problema que é extremamente estranho para mim.
Eu tenho um loop que lê um arquivo linha por linha que se parece com isso:
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
Eu chamo o arquivo .bat em um sub shell, por isso não deve afetar nenhuma das minhas variáveis. Parece algo assim:
$(CMD /c c.bat -c "$SCR_DIR/prepsdk.sh Build $apppath")
O mais estranho é que o arquivo bat finaliza meus loops de alguma forma. Significado eu vou ver o seguinte resultado:
Início do loop Saída de .bat Fim do Loop Fora do loop
Se a chamada para .bat for comentada, vejo
Início do loop Fim do Loop Início do Loop Fim do Loop ..... Início do Loop Fim do Loop Fora do loop
Portanto, o comportamento é o esperado com o arquivo .bat não sendo chamado. O que o arquivo .bat poderia estar fazendo que faz com que o loop seja encerrado assim? Não está modificando o arquivo $ MANIFEST, tive certeza disso.
Tente executar o arquivo em lote com call foo.bat
.
Por qualquer motivo, se você executar um arquivo em lotes dentro de outro arquivo em lote sem a instrução de chamada, o arquivo em lote externo será finalizado. Eu não sei porque o comportamento padrão foi sempre desejável.
Tags bash batch cygwin batch-file