人々が入力してシェルスクリプトを実行するのを見たことがあります./scriptname
。今はこれが基本的な方法のようです。かなり頻繁に見えますが、時々sh scriptname
。それは単に好みの問題ですか、それとも2つの間にもっと重要な違いがありますか?./そしてシェン?
答え1
いくつかの違いがあります。
./scriptname
呼び出しファイルはscriptname
実行可能で、最初の行(「shebang」で)で指定されたシェルを使用する必要があります。例えば #!/bin/sh
)、もしそうなら。
sh scriptname
scriptname
呼び出されるファイルを読み取ることができる限り動作し、sh
スクリプトの shebang が指定するものが何であっても使用されます。一部のシェルでは、scriptname
現在のディレクトリに存在しない場合に指定されたディレクトリが検索され、そこに見つかった最初のディレクトリ(存在する場合)が読み取られ、解釈されます。PATH
scriptname
言い換えれば、
sh scriptname
設定なしで動作しますが、誤ったシェルを使用しているか、間違ったスクリプトを実行している可能性があります。
./scriptname
正しいシェル(または少なくともスクリプト作成者が指定したシェル(存在する場合))を使用して正しいスクリプトを実行しようとしますが、最初にいくつかの設定が必要になる場合があります(chmod a+x scriptname
)。