次に始まるシェルスクリプトファイルが与えられた場合
#!/bin/bash
# (bash script here),
修正しましたがchmod +x
、実行とコマンドラインの間に違いがありますか?./script
bash script
答え1
それはあなた次第です$PATH
。 ./script
実行できます/bin/bash script
。パスに最初に現れるものは何でも使用されますbash script
が、必ずしもそうではなく、他のバージョンのBashでもあります。bash
/bin/bash
答え2
2つの違いがあります。
./tryit.sh
bashがなければ実行されませんが/bin
、bash tryit.sh
bashがあれば実行されません。なぜなら、bangパス()のシェルが使用されるからPATH
です。./tryit.sh
/bin/bash
bash tryit.sh
bash
PATH
./tryit.sh
実行ビットが設定されていない場合は実行されませんが、bash tryit.sh
スクリプトは実行されます。ビットがセットされることを指定して、このような状況を排除しました。一部の編集者はこのビットをクリアして作業コマンドが失敗する可能性があります。
このコマンドはbash tryit.sh
bashを呼び出して、実行するコマンドがファイルに見つかったことを示しますtryit.sh
。多くのプログラム(例えば、awk、perl、python、bash、sh、ksh)がこのように動作します。これは、コマンドファイルを処理するUnixプログラムの標準idomです。
答え3
少しずつ違うのでミスしやすいです。
使用すべきこと(両方の形式で作成します)
./script
bash ./script
私の推論は、ディレクトリを変更する場合はこれが明らかであるということです。
明示的でない形式
script
bash script
それほど安全ではありません。bash script
現在のディレクトリを検索し、PATH環境変数のディレクトリを検索し、script
PATHディレクトリからのみ検索します。予想とは異なるコマンドを実行すると、ファイルが破損する可能性があります。
答え4
私の記憶が正しいなら、次の2つははいまったく同じです:
$ ./script
そして
$ source script
したがって、./
「コマンド」を使用すると、実際にsource
フードの下で呼び出された、それ自体がbash
組み込まれたコマンドです。あるいは他の解釈では、お互いを別名で呼ぶこともできます。
しかし、:最初の呼び出しでは、ユーザー(ユーザー)が所有者またはグループの+x
(=実行可能)フラグを設定する必要がありますchmod
。それ以外の場合は「許可拒否」エラーが発生しますが、source
そのコマンドで実行することもできます。いいえバナー+x
。したがって、たとえばbash
NTFS形式のペンドライブでスクリプトを実行したい場合、後者は時々救世主になります。なぜなら、NTFS形式のペンドライブchmod
では動作しないからです。
私考えるこれはまた、どのような方法であなたの質問に答えます。
したがってbash script
、呼び出し手順はsource script
まったく同じにすることはできません。bash
それ自体他のスクリプトがそのうちbash
の1つを呼び出している間は、スクリプトを引数として指定してください。組み込みコマンドスクリプトをパラメータとして渡します。結果は(少なくとも日常的な使用では)同じである可能性が高いですが、両方の場合で結果を取得する方法は多少異なります。