Unixの行末でバッチファイルを書くことは安全ですか?


15

UNIXの行末で書かれているため、バッチファイルのバグに出くわしたと思います。これは、Windowsでバッチファイルを実行しているcmd.exeの既知の問題ですか?


1
私はこれまで問題を抱えたことはなく、常にUNIXの行末記号を使用しています。しかし、だからといって、見逃せないほど幸運だった問題がないわけではありません。
ゾレダチェ

2
どのバグに遭遇しましたか?コマンドが起動しない?または、メモ帳でファイルを開いたときに行末がないように見えただけですか?
ヘネス

回答:


11

これは実際には「バグ」ではありません...設計上の問題です。Windowsの改行は "\ r \ n" ...または "Carriage Return"と "New Line"の組み合わせとして定義されますが、* nixフレーバーはキャリッジリターンを省略することを好みます。可能な場合は、Windowsのすべてで常に「\ r \ n」を使用する必要があります。それ以外は間違って解釈される可能性があります...そして、予想外の結果を大量に引き起こします。


:labelの呼び出しがラベルにジャンプしない問題に遭遇しましたが、ファイルの同じ呼び出しがラベルにジャンプしました。問題のファイルは\ n行末を使用していました。プロジェクト内のすべてのバッチファイルの行末を\ r \ nに切り替えたところ、問題はなくなりました。\ nの末尾で再テストしなかったので、それが1回限りのフルークではないことを確認しました(スクリプトの実行には1時間近くかかります)。
サミュエル

2
メモ帳はUnixの行末を処理できませんが、WordPadはPowerShellを使用でき、他の多くの機能も同様に使用できます。
マイケルハンプトン

.batファイルがnixの行末で正しく機能しない場合、いくつかの例を提供しますか?
ミカルコーダ

@MichalKordasすべてのMicrosoft OSおよび* nixディストリビューションのすべてのバージョンをテストすることなく、それはある種の難しい注文です。これは、このテーマに関する詳細な議論に入る場所ではありません。ベストプラクティスは、Windowsが\ r \ nを使用し、* nixが\ nを使用し、macが\ rのみを使用する場合です。Windowsのみがバッチファイルを使用するため、\ r \ nを使用することを想定するのが最善です。
TheCompWiz

4

そうです、バッチというラベルが時にスキップされているLF(Unixの行末が)で使用される.batファイル。


3

バッチファイルの場合、UNIXの行末とWindowsの行末の間に違いはないようです。

gotocallまたは改行変数の作成も両方のスタイルで機能します。

バッチパーサーは、パーセント展開フェーズの直後にキャリッジリターンを削除するため、大きな役割を果たすことはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.