web-dev-qa-db-ja.com

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

(Ubuntu-OSXの互換性と使いやすさ、POSIXについては、 se#!/ bin/shまたは#!/ bin/bashを参照 を参照)

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

スクリプトを.shで終了して「シェルスクリプト」を示すだけにするかどうかわからないので、最初の行でbashシェルを選択します(例:#!/usr/bin/env bash)または、それらを.bashで終了するかどうか(および1行目の設定)。 bashが呼び出されるようにしたい。

38
Michael Durrant

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

インタープリターを明示的に使用しない場合、呼び出されるインタープリターは、スクリプトで使用されるShebangによって決定されます。特にインタープリターを使用する場合、インタープリターはスクリプトにどの拡張子を付けるかを気にしません。ただし、拡張機能は、どのような種類のスクリプトであるかを他のユーザーに非常に明確にするために存在します。

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

見る、 .py bashスクリプトの拡張は、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
21
Sree

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

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

個人的には、スクリプトがsh、bash、Perlのどれであるかは気にしません。拡張機能を追加する必要はありません。それを知りたい場合は、file scriptnameを実行してファイルが何であるかを調べます。

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

24
wurtel