Stack Overflowにコメントを残してください。PowerShell Coreは、Linux環境でCRLF行末のあるps1ファイルを処理できますか?Shebangを使用する実行可能ファイルは、引用に応じてLF行末のみを使用する必要があると主張します。オライリーの本。ここで逸話的な証拠shebangラインはcr-lfとは機能しませんこれを証明するようです。
しかし、これは正式な*nix要件ですか、それとも1つのプラットフォームでの動作ですか?どこかに文書化されていますか?間違いなく周りに方法がありません(例:#
行の末尾に追加を追加するなど)。
つまり、PowerShellスクリプトがクロスプラットフォームを使用するためのものである場合は、LF行の末尾(現在の最新のPowerShellで実装可能)に制限されます。バラよりPowerShellスクリプト用のshebangを使用するのが最善ですか?ここにもありますPowerShellスクリプトでshebangをどのように使用しますか?スタックオーバーフローに。
答え1
POSIXlyでは、改行文字は唯一の改行文字です。
また、ハッシュバンラインはPOSIXによって指定されず、さまざまなPOSIXyとUnixyシステムの間にも実装の違いがあるため、Windows互換で設計された一部のシステムではハッシュバンラインを排他的に処理することができます。 (これを試してから長い時間が経ちましたが、Cygwinが少なくとも一度はCRLF修正を行ったという印象を受けました。ある程度は必ずしもそうではありません。)
(そしてhashbang行を処理するPerlインタプリタがあります。それ自体、カーネルがそうでない場合。 )
#
一般的にいいえ。 CRを防ぐためにコメントタグの使用に頼ることはできません。たとえば、Linuxには次のハッシュバン行があります。
#!/bin/bash#[CR]
単一の引数(およびファイル名)でのみ実行され、bash
「ファイルが見つかりません」エラーが発生する可能性があります。#[CR]
しかし、私のMacのようないくつかのシステムで動作します。https://www.in-ulm.de/~mascheck/various/shebang/異なるシステム間のハッシュバン処理の違い表を参照してください。
答え2
POSIX定義(https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html)
3.403 テキストファイル
ゼロ個以上の文字で構成されるファイルを含みます。ワイヤー。この行には NUL 文字は含まれず、<newline> 文字を含めて {LINE_MAX} バイトより長くすることはできません。 POSIX.1-2017はテキストファイルとバイナリファイルを区別しませんが(ISO C標準を参照)、多くのユーティリティはテキストファイルで動作すると予測可能または意味のある出力のみを生成します。これらの制限を持つ標準ユーティリティは、常にSTDINまたはINPUT FILESセクションに「テキストファイル」を指定します。
そして
3.206ライン
ゼロ個以上の<newline>以外の文字と終了<newline>文字のシーケンス。
キャリッジリターンは行末の一部ではありません。 「<newline> 以外の文字」です。