在Linux终端中执行bash脚本时,“ bash foo.sh
”和“ ./foo.sh
”之间有区别吗?或者它们只是执行相同功能的两种不同方式?
答案1
如果满足以下条件,它们可能是等效的:./foo.sh
- 是可执行的,并且
- 开头为
#!/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 脚本来运行脚本并在脚本中进行任何更改的一种方法。