从命令行运行Unix可执行文件

时间:2014-12-20 02:20:34

标签: unix

如果我在目录foo中,其中包含可执行文件bar,为什么键入bar会导致

  

bar:找不到命令

而键入./bar有效吗?

3 个答案:

答案 0 :(得分:4)

因为默认情况下,* nix $ PATH不包含当前目录。信不信由你,这是件好事:

Why do you need ./ (dot-slash) before script name to run it in bash?

Linux doesn't automatically add current directory to PATH

  

不,它不是“令人讨厌”。这是为了安全的好习惯。   成像您编写脚本并将其命名为“ls”,然后将其保存在文件夹中   在你有权访问的地方,让我们说/ tmp。现在,如果你得到你的管理员   在/ tmp中以root身份运行“ls”并拥有“。”在PATH中,这将运行你的   脚本而不是运行真正的“ls”。这样你就可以做一些   讨厌的把戏。这就是为什么 ”。”不在你的PATH中。现在,如果你不这样做   需要这种安全性,然后修改你的PATH。

没有什么可以阻止你修改你的$ PATH。在Linux上,主目录中的“.bashrc”是个好地方。如果添加“。”,则应将其添加到$ PATH的 END ,而不是开头。

答案 1 :(得分:2)

在你的例子中," bar"不起作用因为" ./"不在你的PATH环境变量中。您可以通过键入

来验证这一点
echo $PATH

答案 2 :(得分:2)

因为与Windows不同,当前目录不在$PATH中。所以你的shell不会试图在当前文件夹中查找命令名bar,除非你告诉它看那里。