bashスクリプトに.shまたは.bash拡張子を使用しますか?


36

Ubuntu-OSXの互換性と使いやすさとPOSIXについては、#!/ bin / shまたは#!/ bin / bashを使用してください

スクリプトでbashシェルを使用する場合、.bash拡張子を使用すると実際にbashが呼び出されるのか、それともシステム構成/最初のシェバン行に依存するのか。両方が有効であるが異なる場合、どちらが優先されますか?

スクリプトを.shで終了して「シェルスクリプト」を示すだけで、最初の行でbashシェルを選択する#!/usr/bin/env bashか(例)、または.bashで終了するだけでなく(行1の設定も) )。bashを呼び出したい。


3
.bash拡張機能を見たことがないと思います。また、bin拡張機能を持たないフォルダーの1つにあるスクリプトをパッケージに含めることはDebianのポリシーです。
ムル

回答:


19

.bash拡張子を使用して実際にbashを呼び出すか、システム構成/最初のシェバン行に依存しますか。

インタープリターを明示的に使用しない場合、呼び出されるインタープリターshebangは、スクリプトで使用されるものによって決定されます。インタープリターを具体的に使用する場合、インタープリターはスクリプトにどの拡張子を付けてもかまいません。ただし、この拡張機能は、他の人にとってどんなスクリプトなのかを非常に明確にするために存在します。

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

参照してください、.pybashスクリプトを拡張してもPythonスクリプトにはなりません。

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

常にbashスクリプトです。

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script

23

スクリプトの命名は、実行方法とは関係ありません。

shebang行は、スクリプトの実行に使用されるインタープリターを定義します。

私は、スクリプトがsh、bash、perlのどれであるかは個人的に気にしません。拡張機能を追加することは冗長です。私はそれfile scriptnameを知りたい場合は、ファイルが何であるかを知るためにします。

したがって、スクリプトをで実行するbash場合#!/bin/bashは、最初の行として使用します。


4
また、スクリプトの実装の選択が変更された場合(たとえば、Python、Perl、C ...で書き換えられた場合)、- .shstyle拡張がないため、名前を変更する必要はありません。(確かに、Cプログラムが.sh拡張子付きのバイナリを生成するのを妨げるものは何もありません。混乱を招くだけです。)
スティーブンキット

2
使用#!/usr/bin/env bash可搬性のために、ここで説明stackoverflow.com/a/10383546/54964
レオ・レオポルド・ヘルツ준 영を

4
@wurtel(延期されたコメント、OK?)拡張機能imhoを追加することは冗長とはほど遠い。ほとんどのエディターは、拡張子に基づいた構文の強調表示をサポートしています。さらに、ファイルの種類をすぐに確認できるようにすることは理にかなっています。明瞭さと読みやすさは重要です。
-RolfBly

@RolfBly:私が使用しているエディターは、シバンを認識し、構文の強調表示を提供します。明快さは便利ですが、ほとんどの場合、コマンドを実行したいので、入力を少なくする必要があり、その実装言語を覚えておく必要がなければ便利です。
ホントヴァリレヴェンテ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.