【发布时间】:2014-02-09 11:12:19
【问题描述】:
我已经使用chmod +x 使我的 Python 脚本可执行,现在我可以从带有 ./ 前缀 (./script_name) 的终端运行它。
这个前缀到底是什么意思?为什么需要运行可执行文件?
【问题讨论】:
标签: linux executable
我已经使用chmod +x 使我的 Python 脚本可执行,现在我可以从带有 ./ 前缀 (./script_name) 的终端运行它。
这个前缀到底是什么意思?为什么需要运行可执行文件?
【问题讨论】:
标签: linux executable
与任何其他程序一样,shell 也是一个等待输入的程序。现在,当您输入 command1 arg1 arg2 ... 时,shell 所做的第一件事就是尝试从以下各项中识别 command1:
typeset -f)type)alias)现在问题涉及最后一点可以执行的文件。 Unix 内核将在exec() 系统调用中需要可执行文件的绝对路径(请参阅man exec)。
为了获取文件的绝对路径,shell 首先在 $PATH 变量中指定的目录中查找命令。
因此,如果您指定相对路径,例如 ../abc/command1 或 ./command1,那么 Bash 将能够找到该文件并将其传递给 exec() 系统调用。
如果以上四步都无法定位到shell的command1输入,你会得到:
$ command1
command1: command not found
但是,如果文件的绝对路径被解析,但它是不可执行的,你会得到:
$ command1
bash: ./command1: Permission denied
参考资料:
【讨论】:
表示当前目录,脚本在当前目录中。
【讨论】:
操作系统在使用裸可执行名称时搜索您的$PATH(foo 与 ./foo)。在您的情况下,该文件可能不在路径上,因此您需要告诉操作系统它的确切位置。您可以通过指定可执行文件的路径来做到这一点。这就是./ 我所说的:在我当前的工作目录中查找可执行文件。它被称为“相对路径”,当您要引用的内容靠近您当前的工作目录时,它们很方便。
【讨论】: