如果我在目录foo
中,其中包含可执行文件bar
,为什么键入bar
会导致
bar:找不到命令
而键入./bar
有效吗?
答案 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
,除非你告诉它看那里。