Linux端末では、「bash foo.sh」と「./foo.sh」の間に違いはありますか?

Linux端末では、「bash foo.sh」と「./foo.sh」の間に違いはありますか?

Linux端末でbashスクリプトを実行するときに「bash foo.sh」と「」./foo.shの間に違いはありますか?それとも同じ機能を実行する2つの異なる方法ですか?

答え1

次の条件が満たされている場合は同じことがあります。./foo.sh

  1. 実行可能であり、
  2. #!/bin/bash(またはそれに対応する)で始まる

そうしないと、説明する前提条件(foo.shbashスクリプト)によっては、./foo.shバージョンにユーザーの実行権限がないか、デフォルトのスクリプトインタプリタではなくスクリプト/bin/shによって解釈されるため、バージョンが失敗する可能性があります。/bin/bash/bin/sh

答え2

Tobysの答えに加えて、「bash foo.sh」を呼び出す前に、スクリプトで既存のshebang bash引数(例:#!/ bin / bash -e)を確認する必要があることを指摘したいと思います。 "bash foo.sh"を介してスクリプトを呼び出すと、shebangの既存のbash引数は気にしません。

答え3

ここではすでに説明していますが、簡単に言えば、bash foo.shfoo.shがbashシェルで実行されることを意味します。

これは、スクリプトを実行してスクリプトを変更するためにどのシェルスクリプトが使用されるかをカーネルに伝える方法です。

関連情報