Có an toàn để viết các tệp bó với kết thúc dòng Unix không?


15

Tôi nghĩ rằng tôi đã chạy qua một lỗi trong một tệp bó vì nó được viết với các kết thúc dòng unix. Đây có phải là sự cố đã biết với cmd.exe đang chạy các tệp bó trong windows không?


1
Tôi chưa bao giờ có vấn đề, và tôi luôn sử dụng kết thúc dòng unix. Nhưng điều đó không có nghĩa là không có vấn đề gì mà tôi vừa may mắn bỏ lỡ.
Zoredache

2
Bạn đã gặp phải lỗi gì? Các lệnh không bắt đầu? Hoặc chỉ là nó trông như thể không có kết thúc dòng khi bạn mở tệp bằng notepad?
Hennes

Câu trả lời:


11

Đây thực sự không phải là một "lỗi" ... vì nó là thiết kế phụ. Các dòng mới của Windows được định nghĩa là "\ r \ n" ... hoặc kết hợp "Trả lại vận chuyển" và "Dòng mới" ... trong khi các hương vị * nix thích bỏ qua trả lại vận chuyển. Bạn phải luôn luôn sử dụng "\ r \ n" trong mọi thứ trong Windows nếu có thể. Bất cứ điều gì khác có thể được giải thích không chính xác ... và gây ra rất nhiều kết quả bất ngờ.


Tôi đã gặp một vấn đề trong đó cuộc gọi: nhãn không chuyển sang nhãn, nhưng cuộc gọi tương tự sau đó trên tệp đã chuyển sang nhãn. Tệp được đề cập đã sử dụng kết thúc dòng \ n. Tôi đã chuyển sang kết thúc dòng \ r \ n cho tất cả các tệp bó trong dự án của mình và sự cố đã biến mất. Tôi đã không kiểm tra lại với các kết thúc \ n để xác nhận rằng đó không chỉ là một sự cố một lần (các kịch bản mất gần một giờ để chạy).
Samuel

2
Notepad không thể xử lý các kết thúc dòng Unix, nhưng cũng có thể, Wordman có thể, PowerShell, nhiều thứ khác cũng có thể.
Michael Hampton

Bạn có cung cấp thêm một số ví dụ khi tệp .bat không hoạt động chính xác với kết thúc dòng nix không?
Michal Kordas

@MichalKordas Nếu không trải qua và thử nghiệm mọi phiên bản của mọi phân phối Microsoft OS và * nix, đó là một thứ tự cao để đưa ra. Đây thực sự không phải là nơi để thảo luận chi tiết về chủ đề này. Thực tiễn tốt nhất là Windows sử dụng \ r \ n, * nix sử dụng \ n và đôi khi mac chỉ sử dụng \ r. Vì Chỉ Windows sử dụng các tệp bó, nên tốt nhất là giả sử bạn nên sử dụng \ r \ n.
TheCompWiz

4

vẻ như các nhãn hàng loạt bị bỏ qua khi LF(kết thúc dòng Unix) được sử dụng trong một .battệp.


3

Đối với các tệp bó, dường như không có sự khác biệt giữa kết thúc dòng unix và kết thúc dòng windows.

goto, callHoặc thậm chí tạo ra các biến linefeed làm việc với cả hai phong cách.

Và khi trình phân tích cú pháp hàng loạt loại bỏ trả về vận chuyển trực tiếp sau giai đoạn mở rộng phần trăm, chúng sẽ không bao giờ đóng một vai trò lớn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.