例如,我已经安装了 java 并且可以运行,java ...
但是如果我创建一个 shell 脚本,我必须运行./script.sh
。
这是为什么?这./
代表什么?
答案1
当可执行文件不在 PATH 中时,您需要明确指定路径。./
是一个“相对”路径说明符:“从这里开始(.
)不再往下走”(/
)。如果将当前目录添加到 PATH 环境变量并发出rehash
命令,则将不再需要它。
答案2
当您运行命令时,shell 会搜索PATH
变量(或某个哈希表,具体取决于 shell #)以查找可执行文件。但通常不包括当前工作目录 ( .
)。因此,您需要通过添加前缀来告诉 shell 在哪里找到您的脚本,./
如 Floris 所述。
该默认设置的目的是,避免您意外执行名为 eg 的脚本(在当前目录中),rm
而不是预期的命令/bin
。这对于 root 来说尤其重要,因为本地脚本的行为可能与您预期的完全不同!
#我写了更多关于哈希表的内容这个答案。
答案3
当前目录通常不在 PATH 中,因此命令默认不会从当前目录中查找
答案4
java
在你的$PATH
变量中,所以这就是它被发现和执行的原因。./
告诉命令行使用当前目录中的文件,而该文件通常不在 PATH 上。