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

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)

一切都好。

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

Luc*_*ini 5

有一个很大的不同。

让我们使用以下名为 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 。