为什么某些服务器需要’./’来运行脚本而其他服务器不需要?

我想知道为什么有些Ubuntu服务器不同。

我有两个运行Web应用程序的Ubuntu 12.04服务器。 今天我试着从它的文件夹中运行一个sh文件。 服务器1可以在没有./的情况下运行shell,但服务器2需要它。 两者都获得了777的许可。

通常,当前文件夹中的脚本/程序不会在linux / unix上执行。

脚本/程序仅在可以在$PATH变量中找到脚本/程序时执行。

因此,当路径未包含在$PATH变量中时,您必须提供脚本/程序的路径来运行它。 要在当前文件夹中执行脚本/程序,必须使用./表示当前文件夹。

请检查两台服务器上的$PATH变量是否相同。

基于您对$PATH变量的评论,我怀疑其中一个脚本位于$PATH变量找到的文件夹中,而另一个脚本位于另一个文件夹中。

注意

$PATH包含./是个坏主意。 这样,用户可以创建恶意命令(例如ls )并引导您进入保存它的文件夹。 然后,您将执行本地版本而不是系统命令(如果当前文件夹放在/bin之前的$PATH )。