“./command” 和 “bash command” 有什么区别

“./command” 和 “bash command” 有什么区别

我有简单的 bash 脚本文件,它只包含一行:

rvm gemset use --create 2.0.0@PRJ_NAME

如果我运行这个脚本:

./scriptname.sh

我从 RVM 收到一条众所周知的错误消息

RVM is not a function, select.....

但如果我运行脚本

bash scriptname.sh

一切都好。

有人可以向我解释其中的区别吗?

答案1

有一个很大的不同。

让我们使用以下名为 testscript 的脚本(配置为使用 /bin/ksh,如您在 hashbang 中看到的那样):

#!/bin/ksh
#im testscript
cd /proc/$$
file exe

首先让我们用 ./ 执行它:

$ ./testscript
exe: symbolic link to /bin/ksh93

现在调用 bash:

$ bash testscript
exe: symbolic link to /bin/bash

你看得到差别吗?脚本使用的解释器在第二个命令中发生了更改,因此如果脚本依赖于某些克什它将被破坏的特定代码,以及如果脚本依赖于其他方式巴什具体代码,然后将用第一个命令破坏它。

您可以做的其他测试是在两种不同的执行情况下回显 $PATH。

相关内容