(Ubuntu-OSXの互換性と使いやすさ、POSIXについては、 se#!/ bin/shまたは#!/ bin/bashを参照 を参照)
スクリプトでbashシェルを使用する場合、.bash拡張子を使用すると実際にbashが呼び出されますか、それともシステム構成/ 1番目のShebang行に依存しますか。両方が有効であったが異なる場合、どちらが優先されますか?
スクリプトを.shで終了して「シェルスクリプト」を示すだけにするかどうかわからないので、最初の行でbashシェルを選択します(例:#!/usr/bin/env bash
)または、それらを.bashで終了するかどうか(および1行目の設定)。 bashが呼び出されるようにしたい。
.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
スクリプトの名前は、スクリプトの実行方法とは関係ありません。
Shebang行は、スクリプトの実行に使用されるインタープリターを定義します。
個人的には、スクリプトがsh、bash、Perlのどれであるかは気にしません。拡張機能を追加する必要はありません。それを知りたい場合は、file scriptname
を実行してファイルが何であるかを調べます。
そのため、スクリプトをbash
で実行する場合は、最初の行として#!/bin/bash
を使用します。