È sicuro scrivere file batch con terminazioni di linea Unix?


15

Penso di aver riscontrato un bug in un file batch perché è stato scritto con terminazioni di riga unix. È un problema noto con cmd.exe che esegue file batch in Windows?


1
Non ho mai avuto problemi e utilizzo sempre le terminazioni di linea unix. Ma ciò non significa che non ci siano problemi che ho avuto la fortuna di perdere.
Zoredache,

2
In quale bug ti sei imbattuto? I comandi non si avviano? O solo che sembrava che non ci fossero terminazioni di riga quando si apre il file con Blocco note?
Hennes,

Risposte:


11

Questo non è davvero un "bug" ... in quanto è di progettazione. Le nuove righe di Windows sono definite come "\ r \ n" ... o una combinazione "Ritorno a capo" e "Nuova riga" ... mentre i gusti * nix preferiscono omettere il ritorno a capo. Dovresti sempre usare "\ r \ n" in qualsiasi cosa in Windows ove possibile. Qualsiasi altra cosa può essere interpretata in modo errato ... e causare molti risultati inaspettati.


Mi sono imbattuto in un problema in cui call: label non è passato a un'etichetta, ma la stessa chiamata in seguito sul file è passata all'etichetta. Il file in questione utilizzava \ n terminazioni di riga. Sono passato a \ r \ n terminazioni di riga per tutti i file batch nel mio progetto e il problema era scomparso. Non ho testato di nuovo con finali \ n per confermare che non si trattava solo di un colpo di fortuna (gli script impiegano quasi un'ora per essere eseguiti).
Samuel,

2
Il blocco note non è in grado di gestire i finali di linea Unix, ma WordPad può, PowerShell può, anche molte altre cose.
Michael Hampton

Cam fornisci altri esempi quando i file .bat non funzionano correttamente con le terminazioni di linea nix?
Michal Kordas,

@MichalKordas Senza passare attraverso e testare ogni versione di ogni sistema operativo Microsoft e distribuzione * nix, è una specie di ordine elevato da dare. Questo non è davvero il posto dove andare in una discussione dettagliata sull'argomento. Le migliori pratiche sono tali che Windows usa \ r \ n, * nix usa \ n e talvolta mac usa solo a \ r. Poiché solo Windows utilizza file batch, è meglio supporre che tu debba usare \ r \ n.
TheCompWiz

4

E sembra che in batch etichette vengono ignorati quando LF(fine riga Unix) viene utilizzato in un .batfile.


3

Per i file batch non sembra esserci alcuna differenza tra le terminazioni di linea unix e le terminazioni di linea di Windows.

goto, callo anche la creazione di variabili di avanzamento riga funziona con entrambi gli stili.

E poiché il parser batch rimuove i ritorni a capo direttamente dopo la fase di espansione percentuale, non avranno mai un ruolo importante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.