在Linux终端中,“bash foo.sh”和“./foo.sh”之间有区别吗

在Linux终端中,“bash foo.sh”和“./foo.sh”之间有区别吗

在Linux终端中执行bash脚本时,“ bash foo.sh”和“ ./foo.sh”之间有区别吗?或者它们只是执行相同功能的两种不同方式?

答案1

如果满足以下条件,它们可能是等效的:./foo.sh

  1. 是可执行的,并且
  2. 开头为#!/bin/bash(或同等内容)

否则,考虑到您描述的前提条件(foo.sh是 bash 脚本),该./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.sh意味着 foo.sh 将在 bash shell 中执行。

它只是告诉内核将使用哪个 shell 脚本来运行脚本并在脚本中进行任何更改的一种方法。

相关内容