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.shは bash スクリプトである) が与えられている場合、./foo.shユーザーの実行権限がないか、(はデフォルトのスクリプト インタープリターである)/bin/shではなく によって解釈されるために、バージョンが失敗する可能性があります。/bin/bash/bin/sh

答え2

Toby の回答に加えて、単に 'bash foo.sh' を呼び出す前に、スクリプト内の既存の shebang bash パラメータ (#!/bin/bash -e など) を確認する必要があることを指摘しておきます。'bash foo.sh' 経由でスクリプトを呼び出す場合、shebang 内の既存の bash パラメータは考慮されません。

答え3

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

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

関連情報