Czy bezpiecznie jest pisać pliki wsadowe z zakończeniami linii w systemie Unix?

15

Myślę, że natrafiłem na błąd w pliku wsadowym, ponieważ został napisany z zakończeniami linii uniksowej. Czy to znany problem z uruchamianiem plików wsadowych w cmd.exe w systemie Windows?

cmcginty
źródło
1
Nigdy nie miałem problemu i zawsze używam zakończeń linii unix. Ale to nie znaczy, że nie ma jakiegoś problemu, który miałem szczęście przegapić.
Zoredache,
2
Na jaki błąd wpadłeś? Polecenia nie uruchamiają się? A może po prostu wyglądało na to, że po otwarciu pliku za pomocą notatnika nie ma zakończeń linii?
Hennes,

Odpowiedzi:

11

To naprawdę nie jest „błąd” ... ponieważ jest zgodny z projektem. Nowe wiersze w systemie Windows są zdefiniowane jako „\ r \ n” ... lub kombinacja „Zwrot karetki” i „Nowa linia” ... podczas gdy smaki * nix wolą pominąć znak powrotu karetki. Zawsze należy używać „\ r \ n” w dowolnym systemie Windows, jeśli to możliwe. Wszystko inne może być interpretowane niepoprawnie ... i powodować wiele nieoczekiwanych rezultatów.

TheCompWiz
źródło
Natknąłem się na problem polegający na tym, że call: label nie przeskoczył do etykiety, ale to samo wywołanie później w pliku przeskoczyło do etykiety. W tym pliku użyto \ n zakończeń linii. Przełączam się na \ r \ n zakończenia linii dla wszystkich plików wsadowych w moim projekcie i problem zniknął. Nie przetestowałem ponownie zakończeń \ n, aby potwierdzić, że nie był to jednorazowy przypadek (uruchomienie skryptów zajmuje prawie godzinę).
Samuel
2
Notatnik nie obsługuje końcówek linii uniksowych, ale WordPad potrafi, PowerShell może, wiele innych rzeczy.
Michael Hampton
Czy podajesz więcej przykładów, gdy pliki .bat nie działają poprawnie z zakończeniami linii nix?
Michał Kordas
@MichalKordas Bez konieczności przeglądania i testowania każdej wersji każdego systemu operacyjnego Microsoft i dystrybucji * nix, jest to dość wysoka kolejność. To naprawdę nie jest miejsce na szczegółową dyskusję na ten temat. Najlepsze praktyki polegają na tym, że Windows używa \ r \ n, * nix używa \ n, a czasami Mac używa tylko \ r. Ponieważ tylko system Windows używa plików wsadowych, najlepiej założyć, że powinieneś użyć \ r \ n.
TheCompWiz
4

To wydaje się , że partia etykiety są pomijane, gdy LFjest używany (Unix line-kończąc) w .batpliku.

go2null
źródło
3

W przypadku plików wsadowych wydaje się, że nie ma różnicy między zakończeniami linii uniksowych a zakończeniami linii systemu Windows.

goto, calla nawet tworzenie zmiennych wysuwu linii działa z oboma stylami.

A ponieważ parser partii usuwa powroty karetki bezpośrednio po fazie rozszerzenia procentowego, nigdy nie będą odgrywać dużej roli.

jeb
źródło