我决定学习C++(我在工作中C编程),我一直在阅读一些教程(以及Stack Overflow上的大量帖子)。好的,所以我输入标准的C ++“hello word”,在我的GCC机器上用Ubuntu编译为“test”。
然后我尝试通过输入“test”并按Enter键来运行它。没有。事实证明我必须用“./test”运行它。好的,好的,我会从现在开始这样做。但为什么? “./”只是说我应该运行的是当前目录...当OS正在搜索要运行的东西时,当前目录不总是PATH的一部分吗?我可以这样做吗?
答案 0 :(得分:10)
是的,当前目录不是PATH的一部分。你不希望它,因为那时你可能在一个目录中,你有一个你不知道的恶意程序。
如果你习惯于运行/ usr / bin / grep,但是你碰巧在一个目录中,那个坏人把grep的恶意副本放进去,这次你运行grep,然后你运行grep超出当前目录,而不是/ usr / bin / grep。
你当然可以在你的〜/ .profile或〜/ .bash_profile中添加./到你的PATH,但我不推荐它。
如果它让你感觉更好,15年前当我开始使用类Unix系统时,我也有同样的挫败感。
答案 1 :(得分:6)
您可以添加“。”到你的PATH,但在这种情况下这对你没有帮助 - “test”是一个内置的shell。
答案 2 :(得分:3)
不幸的是,有一个名为“test”的Unix命令......
答案 3 :(得分:1)
如果您经常运行命令行脚本,则可以设置command line alias以消除每次键入./的需要。
答案 4 :(得分:1)
即使当前目录位于$ PATH的最开头,'test'仍然不会在(大多数?)shell上运行它,因为'test'是一个shell内置命令。
答案 5 :(得分:0)
没有'。' PATH中的(当前目录)是次要安全措施。如果您愿意,可以随时添加它,尽管这不是最佳实践。
答案 6 :(得分:0)
如果不清楚,这是Windows与Unix / Linux不同的一个方面。在Windows上,当前目录隐含在路径中。