web-dev-qa-db-ja.com

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

ウィキペディアで、 。sh の記事はこう言っています:

.shファイル拡張子タイプについては、「 Bourne Shell 」を参照してください。

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

Shebang がファイル内で使用されていることを知っています実行するインタープリターを示しますが、

  • ファイル拡張子とファイル拡張子なしのメリットとデメリットは何ですか?
46

.sh何かmeant移植可能であること(そしてうまくいけばis移植可能)。

それ以外の場合は、言語を非表示にする方が良いと思います。とにかく注意深い読者なら、シバン行でそれを見つけるでしょう。 (実際には、 .bashまたは.zshなど...サフィックスはほとんど使用されません。)

35

厳密に言えば、専門性に基づいて、ファイル拡張子の「推奨事項」は存在しないと思います。Unix/ Linux/* BSDファイルシステムは、拡張子自体をサポートしていません。拡張子とは、単一のファイル名のサフィックスにすぎません。これは、inode-moral-equivalentの特別なスポットが拡張用に予約されているVM/CMS、VMS、MS-DOS、WindowsファイルシステムおよびOSとは異なります。

さて、この小言は、シェルスクリプトファイル名に ".sh"または ".ksh"または ".bash"サフィックスを付けるのは少しばかげていると思います。プログラムはプログラムです。何が実行されるのかを区別することに利点はありません。ファイル名の接尾辞のためだけに、unixやlinuxなどのカーネルがファイルのインタープリターを呼び出すことを決定していません。すべて#!行、またはファイルの先頭にあるその他の「マジックナンバー」バイトシーケンス。実際、「拡張子」というファイル名に基づいて何を実行するかを決定することは、Windowsをマルウェアの磁石にする要因の1つです。 「something.jpg.exe」という名前のファイルが関与するWindowsマルウェア詐欺の数を見てください。デフォルトでは、新しいWindowsは「.exe」拡張子を表示せず、ユーザーに「画像」をダブルクリックするよう勧めています。マルウェアは画像ビューの代わりに実行されます。

とにかく、まっすぐなコマンドと考えるかもしれないのは、とにかくシェルスクリプトです。 ccはshスクリプトである場合があり、firefoxはshスクリプト、startxはshスクリプトです。スクリプトに ".sh"サフィックスを付けることには、認知的または組織的なメリットがあるとは思いません。

25
Bruce Ediger

多くのファイニックス環境で働いてきた私としては、多種多様なシェルで書かなければなりませんでした。信じられないかもしれませんが、プラットフォーム間で、シェルは同じではありません。したがって、個人用ライブラリを複数のシェルで維持している場合(必要な場合)、拡張機能を使用してシェルにIDを付けると非常に役立ちます。そうすれば、別のプラットフォームに移動してシェルが少し異なる場合でも、変更の対象となるスクリプトがわかります。 .sh .ksh .bsh .csh ...

13
Jumpylodo

実行可能ファイルには互換性がないため、実行可能ファイルには拡張機能を使用しないでください。シェルスクリプトがあるとしますa.sh、次にpython a.py、スクリプトを呼び出すすべてのプログラムを変更する必要があります。実装の詳細が漏洩しています。

MircosoftのWindowsのファイル名拡張子全体はめちゃくちゃです。たとえば、a.audio, b.audio, c.audioa.mp3, b.wav, c.oggd.picture, e.picture, f.pictured.jpeg, e.png, f.gif。ほとんどの場合、オーディオや画像の形式を気にしません。また、新しいユーザーにすべてのファイル拡張子を教えるのに長い時間を費やす必要があります。

8
ctrl-alt-delor

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

拡張子を付けないか、.sh

使用するシェル(csh、tcsh、bash、shなど)に関係なく、私は個人的に次の規則を使用します。

  • システムまたはハイグレードスクリプトの拡張はありません(非常にまれです)。
  • .shクラシックスクリプトの場合、低から高のグレード。
5
Ouki

シェルスクリプト拡張は非常に便利です。たとえば、私は多くの場合、同じディレクトリに複数の言語(bash、awk、luaなど)の複数のファイルを含むスクリプトを作成します。 bashファイルのみで文字列を検索する必要がある場合は、拡張機能によってこれが非常に便利になり、誤検知を減らすことができます。または、そのプロジェクトのすべてのbashコードの行数を計算する場合。

プログラムを実行するときに拡張子を入力しなければならないのは面倒なので、メインの実行可能ファイルへの拡張子なしでシンボリックリンクを作成し、毎回拡張子を入力しなくても編集/実行できるようにします。シンボリックリンクは安くて簡単です。

4
Steve

他の人が言ったように、シェルは拡張機能を気にしません。ただし、人間によるファイルの迅速な識別は可能です。 .pyまたは.shで終わるファイルがあり、それらが(少なくとも)どうあるべきかがすぐにわかります。スティーブが言うように、ファイル拡張子による検索または行カウントの実行も実用的な考慮事項です。

2
qwr