web-dev-qa-db-ja.com

スクリプトを実行するために、.shファイルの代わりに.txtファイルを実行可能にしてみませんか?

コマンドを.shファイル内に配置し、chmodを使用して実行可能にすることで同じことを行うことができるため、単一のスクリプトを作成するために、.txtファイル内に実行可能コマンドを配置する必要があるのか​​疑問に思いました。

これはどのファイル拡張子でも可能だと思います。そのため、.sh拡張機能の必要性についてかなり混乱しています。どんな助けでも大歓迎です。

18

あなたが正しく見つけたように、ファイル拡張子が特定のものに一致する必要はありません。

Unixライクシステムでは、ファイルタイプは通常、名前ではなくファイルのコンテンツ(つまり、「マジックナンバー」または最初の数バイトのその他の特徴的な構造)から派生します。拡張機能を完全に省略することもできます。これは、実行可能ファイルでよく行われます。

fileコマンドを確認すると、コンテンツからファイルタイプについて調べることができる情報が表示されます。

実行可能なスクリプトの場合、システムは最初の行にいわゆる「シェバン」を期待します。好む

#!/usr/bin/env python3

スクリプトファイルを引数としてインタープリターとして実行するプログラムを示します。そのようなシバンなしでテキストファイルを実行すると、デフォルトのシェル、つまりBashを使用して、それを試して解釈します。

そのため、Unix/Linuxシステムでは、ファイル名拡張子は、特定のファイルに何が含まれているかを人間のユーザーがすばやく認識するためのヒント(ただし、保証ではありません)です。これは、たとえばファイルをすばやく見つける。

ただし、名前と拡張子が重要ないくつかの例外があることに注意してください(たとえば、命名規則に従う必要のあるシステム構成ファイル、または多くの画像ビューアーとエディターもファイルタイプを示すために拡張子を必要とします)。

ファイル拡張子には目的がありますか(オペレーティングシステム用)? もご覧ください。

47
Byte Commander

UNIX/Linuxのファイル名には、ファイルの「拡張子」や「タイプ」などはありません。

他の人が指摘しているように、関連する魔法がシステムで利用可能であると仮定して、fileコマンドを使用して「タイプ」を見つけることができます。 UNIX/Linuxファイル名には通常、使用可能な任意の文字を含めることができますが、人間とマシンの両方がコンテンツ(およびコンテンツの使用法)について判断できるように、名前に何らかの形式の規則を使用すると便利です。

例として、ファイル名の最後に文字列「.tmp」のようなものを使用するのではなく、ファイル名の最初の文字としてコンマを使用して一時ファイルを示すことがよくあります。結果は同じです。短い時間だけ必要なデータを含むファイルですが、名前に「。」は必要ありません。その中にも文字列「tmp」もありません。これには時々利点があります。ファイル名のリストを解析するとき。ただし、これはMYの規則であり、一時ファイルの名前の規則として「.tmp」を使用しても、他の誰かが別の決定を下す場合があります。

だからあなたへの私の答えは、UNIX/Linuxファイル拡張子は、他のオペレーティングシステムとそのファイルシステムで使用されるファイル拡張子のように見える一連の規則に過ぎないということです。

3
PJF