Unixシェルスクリプトのファイル拡張子

Unixシェルスクリプトのファイル拡張子

Wikipediaでは、この記事は次のとおりです。説明する:

.sh ファイル拡張子の種類については、以下をご覧ください。ボンシェル

他のUnixシェルはどうですか?

わかりましたシェルボーン 使用ファイル内部インタプリタに実行を指示しますが、次のことを知りたいです。

  • ファイル拡張子を使用することとファイル拡張子を使用しないことの長所と短所は何ですか?

答え1

私はこんな風に.sh呼んでみましょう。意味は持ち運びが簡単です(おそらくはい持ち運ぶことができる)。

そうでなければ、隠された言語が良いと思います。注意深い読者はとにかくshebangラインでそれを見つけるでしょう。 (実際には.bashorのような接尾辞は.zshほとんど使用されません。)

答え2

厳密に言えば、ファイル拡張子には「良い習慣」がないと言いたいと思います。 Unix/Linux/*BSD ファイルシステムはデフォルトでは拡張子をサポートしていません。あなたが言う拡張子は単一のファイル名のサフィックスです。これは、inode-moral-equivalの特別な場所が拡張用に予約されているVM / CMS、VMS、MS-DOS、Windowsファイルシステム、およびオペレーティングシステムとは異なります。

この小さな苦情は終わったので、シェルスクリプトファイル名に「.sh」、「.ksh」、または「.bash」のサフィックスを追加するのは少し愚かなことだと思います。プログラムはプログラムです。何が実行されているかを区別しても何の利点もありません。 UNIX、Linux、またはカーネルはファイル名のサフィックスのため、ファイルからインタプリタを呼び出すことを決定しません。これ#!はすべて行またはファイルの先頭にある他の「魔法の数字」バイトシーケンスによって行われます。実際、ファイル名「拡張子」に基づいて何を実行するかを決定することは、Windowsをマルウェアの磁石にする要因の1つです。 "something.jpg.exe" という名前のファイルに関連する Windows マルウェア詐欺がどれほど多くあるかを見てください。既定では、最新の Windows では「.exe」拡張子は表示されず、ユーザーは「イメージ」をダブルクリックすることをお勧めします。マルウェアは画像以外のビューで実行されます。

とにかく、直接実行されるコマンドは通常シェルスクリプトであると考えることができます。時々ccそれはshスクリプト、firefoxshスクリプト、startxshスクリプトです。スクリプトに「.sh」サフィックスを表示することには、認知的または組織的な利点がないと思います。

答え3

さまざまな?nix環境で作業した人として、私はさまざまなシェルで作成する必要がありました。信じられないかもしれませんが、クロスプラットフォームシェルは同じではありません。したがって、複数のシェルでプライベートライブラリを維持する場合(必要に応じて)、拡張機能を使用してシェルを識別することは非常に役立ちます。これにより、他のプラットフォームに移動し、シェルがわずかに異なる場合に変更する必要があるスクリプトを知ることができます。 .sh .ksh .bsh .csh ...

答え4

あなたが言ったように、Unixファイル拡張子は純粋に情報提供のためです。正しいshebangを持ち、実行可能にするためにはスクリプトが必要です。

拡張なしで行うか.sh

どのシェル(csh、tcsh、bash、sh...)を使用しても、私は個人的に次の規則を使用します。

  • システムや高度なスクリプトのない拡張機能(非常にまれです)。
  • .sh低レベルから高レベルまでの古典的なスクリプト。

関連情報