【问题标题】:Running executable files on Linux [duplicate]在 Linux 上运行可执行文件 [重复]
【发布时间】:2014-02-09 11:12:19
【问题描述】:

我已经使用chmod +x 使我的 Python 脚本可执行,现在我可以从带有 ./ 前缀 (./script_name) 的终端运行它。

这个前缀到底是什么意思?为什么需要运行可执行文件?

【问题讨论】:

    标签: linux executable


    【解决方案1】:

    与任何其他程序一样,shell 也是一个等待输入的程序。现在,当您输入 command1 arg1 arg2 ... 时,shell 所做的第一件事就是尝试从以下各项中识别 command1

    1. 一个函数(在 Bash shell 中尝试typeset -f
    2. 内置命令(如type
    3. shell 别名(在 Bash shell 中尝试 alias
    4. 可以执行的文件

    现在问题涉及最后一点可以执行的文件。 Unix 内核将在exec() 系统调用中需要可执行文件的绝对路径(请参阅man exec)。

    为了获取文件的绝对路径,shell 首先在 $PATH 变量中指定的目录中查找命令。

    因此,如果您指定相对路径,例如 ../abc/command1./command1,那么 Bash 将能够找到该文件并将其传递给 exec() 系统调用。

    如果以上四步都无法定位到shell的command1输入,你会得到:

    $ command1
    command1: command not found
    

    但是,如果文件的绝对路径被解析,但它是不可执行的,你会得到:

    $ command1
    bash: ./command1: Permission denied
    

    参考资料:

    【讨论】:

    • 感谢您的回答和参考,我会阅读的。
    • 第一个链接(实际上)已损坏:“linuxforums.org 已免费停放,由 GoDaddy.com 提供。”
    【解决方案2】:

    表示当前目录,脚本在当前目录中。

    【讨论】:

    • 请停止投票给我!这是一个微不足道的问题,答案是微不足道的
    【解决方案3】:

    操作系统在使用裸可执行名称时搜索您的$PATHfoo./foo)。在您的情况下,该文件可能不在路径上,因此您需要告诉操作系统它的确切位置。您可以通过指定可执行文件的路径来做到这一点。这就是./ 我所说的:在我当前的工作目录中查找可执行文件。它被称为“相对路径”,当您要引用的内容靠近您当前的工作目录时,它们很方便。

    【讨论】:

    • 所以如果它被添加到 $PATH 中,./ 就不需要了吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2015-08-21
    • 2011-11-09
    • 2021-02-14
    • 2013-05-08
    • 2018-05-02
    • 2014-11-07
    相关资源
    最近更新 更多