我有简单的 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。