ウィキペディアでは、.shの記事は次のように述べています。
.shファイル拡張子タイプについては、Bourne shellを参照してください。
他のUNIXシェルはどうですか?
私は実行中のインタープリターを示すためにファイル内でシバン が使用されていることを知っていますが、私は疑問に思います:
- ファイル拡張子とファイル拡張子なしの長所と短所は何ですか?
ウィキペディアでは、.shの記事は次のように述べています。
.shファイル拡張子タイプについては、Bourne shellを参照してください。
他のUNIXシェルはどうですか?
私は実行中のインタープリターを示すためにファイル内でシバン が使用されていることを知っていますが、私は疑問に思います:
回答:
私は呼ぶだろう.sh
されて何か意味移植できるようにする(そして、できればあるポータブル)。
それ以外の場合は、言語を非表示にする方が良いと思います。とにかく、読者はシバンの行でそれを見つけるでしょう。(実際には、.bash
または.zsh
など、接尾辞はほとんど使用されません。)
厳密に言えば、技術的にはファイル拡張子の「良い慣行」は存在しないと言えます。Unix/ Linux / * BSDファイルシステムは、それ自体は拡張子をサポートしていません。拡張子と呼んでいるものは、単一のファイル名の接尾辞にすぎません。これは、VM / CMS、VMS、MS-DOS、およびWindowsファイルシステムと、inode-moral-equivalentの特別なスポットが拡張用に予約されているOSとは異なります。
これでちょっとした暴言はありますが、シェルスクリプトファイル名に「.sh」または「.ksh」または「.bash」という接尾辞を付けるのは少しばかげていると思います。プログラムはプログラムです。実行されるものを区別することには利点がありません。ファイル名の接尾辞のためだけに、Unix、Linux、または何らかのカーネルがインタープリターを呼び出すことを決定したカーネルはありません。それはすべて、#!
行、またはファイルの先頭にある他の「マジックナンバー」バイトシーケンスによって行われます。実際、ファイル名「拡張子」に基づいて何を実行するかを決定することは、Windowsをマルウェアの磁石にする要因の1つです。「something.jpg.exe」という名前のファイルに関係するWindowsマルウェアの詐欺の数を調べます。デフォルトでは、新しいWindowsは「.exe」拡張子を表示せず、「
とにかく、多くの場合、直進コマンドと考えることができるのはシェルスクリプトです。時々cc
shスクリプト、firefox
shスクリプト、startx
shスクリプトでした。スクリプトに「.sh」という接尾辞を付けると、認知的または組織的な利点があるとは思わない。
.sh
拡張子を.sh
付けた場合、起動時にコマンド名の一部としてそれを入力する必要があります。それが私がその拡張機能を入れるのが好きではない主な理由です(シバンラインを持つものと同じです)。ところで、Windowsの問題は.exe
プレフィックス自体ではありません(image.jpg
結局Linuxで実行可能ファイルを作成するのは簡単です)が、Windowsが通常、その拡張子を隠しているという事実と、実行可能ファイルを起動するのに必要なアクションドキュメントを開くことはまったく同じです。
多数の?nix環境で働いてきた人として、私は多種多様なシェルで書かなければなりませんでした。信じられないかもしれませんが、プラットフォーム間で、シェルは同じではありません。したがって、(必要に応じて)複数のシェルで個人ライブラリを管理する場合、シェルを識別するために拡張機能を使用すると非常に役立ちます。そのようにして、別のプラットフォームに移動し、シェルがわずかに異なる場合、変更の対象となるスクリプトがわかります。.sh .ksh .bsh .csh ...
#!
スクリプト(例えばの開始時に#!/bin/bash
)?
実行可能ファイルは互換性がないため、拡張子を使用しないでください。あなたがシェルスクリプトを持っていることを想像してからa.sh
、python a.py
で書き直して、スクリプトを呼び出すすべてのプログラムを変更する必要があり、実装の詳細を漏らしました。
MircosoftのWindowsでのファイル名拡張子の全体は混乱です。たとえば、ある可能性がありa.audio, b.audio, c.audio
、あるa.mp3, b.wav, c.ogg
、およびd.picture, e.picture, f.picture
あるd.jpeg, e.png, f.gif
。ほとんどの場合、音声や画像の形式を気にしません。また、すべてのファイル拡張子を新しいユーザーに教えるのに長い時間を費やす必要があります。
*.sh
Debianのは、ということであるに私はちょうど走っrun-parts
などのように、拡張子を持つスクリプトを実行されません/etc/cron.*/
。 archive.oreilly.com/pub/post/runparts_scripts_a_note_about.html
あなたが言ったように、Unixファイル拡張子は純粋に情報です。正しいシェバンを持ち、実行可能であるためにはスクリプトが必要です。
拡張子を使用しないか、を使用できます.sh
。
使用されるシェル(csh、tcsh、bash、sh、...)に関係なく、私は個人的に次の規則を使用します。
.sh
ハイグレードの古典的なスクリプトのため、低いです。シェルスクリプト拡張機能は非常に便利です。たとえば、同じディレクトリに複数の言語の複数のファイル(bash、awk、luaなど)を持つスクリプトを書くことがよくあります。bashファイルのみで文字列を検索する必要がある場合、拡張機能はこれを非常に便利にし、誤検知を減らします。または、そのプロジェクトのすべてのbashコードの行カウントを行いたい場合。
プログラムを実行するときに拡張子を入力するのは苦痛なので、毎回拡張子を入力することなく編集/実行するために、メインの実行可能ファイルへの拡張子なしでシンボリックリンクも作成します。シンボリックリンクは安価で簡単です。
bash script.sh
(またはsh
もちろん)ユーザーへのヒントになります。