gpt4 book ai didi

bash - 为什么在可执行文件或脚本名称之前需要 ./(点斜杠) 才能在 bash 中运行它?

转载 作者:行者123 更新时间:2023-11-30 16:30:03 32 4
gpt4 key购买 nike

在bash中运行脚本时,我必须在开头编写./:

$ ./manage.py syncdb

如果不这样做,我会收到一条错误消息:

$ manage.py syncdb
-bash: manage.py: command not found

这是什么原因呢?我认为 . 是当前文件夹的别名,因此这两个调用应该是等效的。

我也不明白为什么运行应用程序时不需要./,例如:

user:/home/user$ cd /usr/bin
user:/usr/bin$ git

(无需 ./ 运行)

最佳答案

因为在 Unix 上,通常当前目录不在 $PATH 中。

当您键入命令时,shell 会查找由 PATH 变量指定的目录列表。当前目录不在该列表中。

当前目录不在该列表中的原因是安全性。

假设您是 root 用户,进入另一个用户的目录并输入 sl 而不是 ls。如果当前目录在 PATH 中,shell 将尝试执行该目录中的 sl 程序(因为没有其他 sl 程序) 。该 sl 程序可能是恶意的。

它适用于 ./ 因为 POSIX specifies包含 / 的命令名称将直接用作文件名,从而抑制在 $PATH 中的搜索。您可以使用完整路径来达到完全相同的效果,但 ./ 更短且更容易编写。

编辑

那个sl部分只是一个例子。按顺序搜索 PATH 中的目录,当匹配时执行该程序。因此,根据 PATH 的外观,输入普通命令可能足以也可能不足以运行当前目录中的程序。

关于bash - 为什么在可执行文件或脚本名称之前需要 ./(点斜杠) 才能在 bash 中运行它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468939/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com