Ign*_*alò 3 shell bash shell-script
我有一个简单的 bash 脚本文件,它只包含一行:
rvm gemset use --create 2.0.0@PRJ_NAME
Run Code Online (Sandbox Code Playgroud)
如果我使用以下命令运行此脚本:
./scriptname.sh
Run Code Online (Sandbox Code Playgroud)
我从 RVM 收到一条众所周知的错误消息
RVM is not a function, select.....
Run Code Online (Sandbox Code Playgroud)
但如果我运行脚本
bash scriptname.sh
Run Code Online (Sandbox Code Playgroud)
一切都好。
有人可以向我解释其中的区别吗?
有一个很大的不同。
让我们使用以下名为 testscript 的脚本(配置为使用 /bin/ksh,正如您在 hashbang 中看到的那样):
#!/bin/ksh
#im testscript
cd /proc/$$
file exe
Run Code Online (Sandbox Code Playgroud)
首先让我们用 ./ 执行它:
$ ./testscript
exe: symbolic link to /bin/ksh93
Run Code Online (Sandbox Code Playgroud)
现在调用 bash:
$ bash testscript
exe: symbolic link to /bin/bash
Run Code Online (Sandbox Code Playgroud)
你看得到差别吗?脚本使用的解释器在第二个命令中发生了变化,因此如果脚本依赖于某些ksh特定代码,它将被破坏,而如果脚本依赖于bash特定代码,则将使用第一个命令破坏它。
您可以做的其他测试是在两种不同的执行情况下回显 $PATH 。