É seguro gravar arquivos em lote com finais de linha Unix?


15

Acho que deparei com um bug em um arquivo em lotes porque foi escrito com finais de linha unix. Este é um problema conhecido com o cmd.exe executando arquivos em lotes no Windows?


1
Eu nunca tive um problema e sempre uso finais de linha unix. Mas isso não significa que não há nenhum problema que tive a sorte de perder.
Zoredache

2
Em qual bug você se deparou? Comandos falhando ao iniciar? Ou apenas parecia que não havia finais de linha quando você abre o arquivo com o bloco de notas?
Hennes

Respostas:


11

Isso realmente não é um "bug" ... como é por design. As novas linhas do Windows são definidas como "\ r \ n" ... ou uma combinação de "Retorno de carro" e "Nova linha" ... enquanto os sabores * nix preferem omitir o retorno de carro. Você sempre deve usar "\ r \ n" em qualquer coisa no Windows, sempre que possível. Qualquer outra coisa pode ser interpretada incorretamente ... e causar muitos resultados inesperados.


Me deparei com um problema em que a chamada: o marcador não passou para um marcador, mas a mesma chamada mais tarde no arquivo pulou para o marcador. O arquivo em questão estava usando \ n finais de linha. Troquei para \ r \ n finais de linha para todos os arquivos em lotes no meu projeto e o problema desapareceu. Não testei novamente com \ n finais para confirmar que não foi apenas um acaso (os scripts levam quase uma hora para serem executados).
Samuel

2
O bloco de notas não pode lidar com terminações de linha Unix, mas o WordPad, o PowerShell, muitas outras coisas também.
Michael Hampton

Você pode fornecer mais alguns exemplos quando os arquivos .bat não funcionam corretamente com terminações de linha nix?
Michal Kordas

@MichalKordas Sem testar e testar todas as versões de todos os sistemas operacionais Microsoft e distribuição * nix, é uma tarefa difícil. Este não é realmente o lugar para entrar em uma discussão detalhada sobre o assunto. As práticas recomendadas são tais que o Windows usa \ r \ n, * nix usa \ n e, às vezes, o Mac usa apenas a \ r. Como Somente o Windows usa arquivos em lote, é melhor supor que você deve usar \ r \ n.
TheCompWiz #

4

Ele parece que lote rótulos são ignorados quando LF(Unix linha-ending) é usado em um .batarquivo.


3

Para arquivos em lote, parece não haver diferença entre as terminações de linha unix e as linhas de janelas.

goto, callou mesmo a criação de variáveis ​​de avanço de linha funciona com os dois estilos.

E como o analisador de lote remove os retornos de carro diretamente após a fase de expansão percentual, eles nunca desempenharão um papel importante.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.