(個人的メモ) unix 上実行可能スクリプトに拡張子をつけるかつけないか -> コマンドラインから実行するかどうか


NOTE: ただの個人的なメモです。

実行権限と shebang によって実行可能なスクリプトファイルをレポジトリに登録するとき、例えば ruby スクリプトだったら拡張子 (.rb) はほぼ付与されるけれども、 shell script とかになってくると .sh を付与してたりしてなかったりしてコミットされてたとしても、違和感を覚えなかったりした。これは一貫性がないと思ったので、どういう場合に拡張子を付与するべきか、どういう場合に付与しなくてもいいかについて考えてみた。

基本: コマンドライン上で、実行される executable には拡張子をつけない

コマンドラインから実行される executable には、拡張子をつけないが一つの基準になると考えた。PATHを通して環境にインストールした際の、実行可能なコマンド群や、直接ユーザーに呼ばれることを想定している実行可能スクリプトは、拡張子を持っていないケースが多い。ように思う。

例:
* だいたいの PATH 経由で実行されるバイナリ
* ./configure

shebang と拡張子の有無

shebang の目的は、そのスクリプトが executable として取り扱われた時に、どのインタプリタで実行するべきかを指定すること。 executable として扱われないファイルは、shebang は必要ない。

なので、 .rb 拡張子で終わっているようなスクリプトファイルがあった場合、そのファイルはコマンドライン実行されない前提だと考えられ、すると shebang はおそらく必要ない。