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


18

私は内部で実行可能なコマンドを配置する必要がありますかと思った.sh私は内部のコマンドを入れて同じことを行うことができるため、単一のスクリプトを作成するファイル.txtのファイルとそれを使用して実行可能作りますchmod

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


19
Unixは伝統的にファイル拡張子を気にしません。あなたは正しいです-それは問題ではありません。それが純粋にシェルスクリプトであることを読者に明らかにすることです
-vidarlo

8
Linuxのファイル拡張子は、OSによって実際に使用されることはありません。.sh拡張子を付けることは、Pythonやperlスクリプトなどの他の種類のファイルとは対照的に、ユーザーにシェルスクリプトであることを伝えるだけです。個人的には、スクリプトに拡張子を付けません。
doneal24

2
あなたやそれを見ている人に、それがシェルスクリプトであることを伝えるだけで十分です。どの.txtファイルを実行するスクリプトであり、どの.txtファイルをエディターで開くテキストであるかを気にしない場合は、すべてに.txtという名前を付けてください。
ダボロス

2
Right.txt、but.txt if.txt everything.txt ends.txt with.txt the.txt .txt.txt suffix.txt、you.re.txt not.txt helping.txt myself.txt(または.txt anybody.txt else .txt)Understanding.txt what.txt each.txt file.txt is.txt there.txt for.txt。
左辺約

1
これは、これが想定される重複であるという質問にていますが、実際にはこの質問には答えません。
ケニーエビット

回答:


47

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

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

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

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

#!/usr/bin/env python3

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

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

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

また、ファイル拡張子には目的がありますか(オペレーティングシステム用)を参照してください。


3
ファイル拡張子はシェルでは重要ではありませんが、GUI OSの世界では、ダブルクリックを正しく機能させるためにファイル拡張子が必要です。
BallpointBen

@BallpointBen 2つのポイントは無関係です。GUIの下でも、ファイルの「タイプ」をメタデータとして保存することができ、拡張子があるかどうかに関係なく、特定の実行をトリガーできます。MacOSのは、ファイル名の拡張子を持っており、GUIであり、非常にうまくそれを生き残る...しない
パトリックMevzek

1
@PatrickMevzekダウズMacOSが拡張機能を持たない方法 それらの表示を有効にすると、すべてのファイルに表示されます。私は何かが欠けていますか?私はMacOSのプラットフォームに新しいです
シプリアンTomoiagă

1
@CiprianTomoiagă好きなようにファイルに名前を付けることができますが、OSはそれらを正しく機能させるために拡張子を必要としません。例えば参照:howtogeek.com/192628/...
パトリックMevzek

1
@barbecueは、最も一般的な分母をターゲットにしています...それで何が問題になる可能性がありますか:-)(something.com.txtと呼ばれる電子メール添付ファイルを介した攻撃や、Windowsランドの特定の意味として.txtを.comとしてスキップするトリックを行うなど) )。実際、相互運用性のためには、ファイル拡張子を使用することをお勧めします。ただし、これは明らかにDOSによって基本的に導入された欠陥であり、さまざまなOSが拡張子のないファイルに完全に満足していることを学習する必要があります。
パトリックメヴゼク

3

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

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

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

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


FWIW、私も自分のために非標準の規則を使用しています。名前がで始まる私のスクリプト"."は、シェルが点在することを意図しています(サブシェルでは意味のある実行はできません)。それに対応して、使用するエイリアス/スクリプトでデフォルトの「初期ドット=隠しファイル」規則を無効にしてls、「隠し」ファイルを含むすべてのファイルを表示できるようにします。同様に、Windowsでは、「ファイル拡張子を隠す」設定を無効にします。
jrw32982は、Monica
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.