【问题标题】:How to execute a file without .sh extension in shell如何在shell中执行没有.sh扩展名的文件
【发布时间】:2017-04-04 22:28:04
【问题描述】:

我想在 bash 中执行一个不带 .sh 扩展名的文件。

示例:我有可以直接执行的文件“abc.sh”(因为我在第一行添加了#!/bin/bash)但我希望文件名只是“abc”

【问题讨论】:

  • 只是chmod +x abc。扩展在linux中没有意义
  • 当它不在你的 PATH 中(变量告诉在哪里寻找可执行程序),你应该像 ./abc 一样开始(正如@WasteD 提到的那样)。

标签: linux shell unix sh


【解决方案1】:

如果文件已经可以作为abc.sh执行,那么你需要做的就是

mv abc.sh abc

(假设您在文件所在的目录中)

在 Linux 或 Unix shell 中,文件扩展名不会影响它是否会执行。

【讨论】:

    【解决方案2】:

    在 Linux 中,您也可以使用 ./filename 来运行脚本。你需要执行权限:

    chmod 755 filename

    但你仍然需要“Shebang”:

    #!/bin/bash
    

    来自here 我得到了这个:

    如果您没有将脚本目录放在您的 PATH 中,并且。 (这 当前目录)也不在 PATH 中,您可以激活 像这样的脚本:

    ./script_name.sh

    脚本也可以由给定的 shell 显式执行,但是 通常我们只有在想要获得特殊行为时才这样做,例如 如检查脚本是否与另一个 shell 一起使用或打印跟踪 调试:

    rbash script_name.sh

    sh script_name.sh

    bash -x script_name.sh

    【讨论】:

    • 这为我解决了一个问题,但为什么 ./filename 有效?我在谷歌上找不到任何解释。以及如何在不更改目录的情况下从目录执行脚本,例如,您在主目录中,并且您想从那里执行位于 /some/nested/directory 中的名为 filename 的脚本,该怎么做?跨度>
    • @QuestionMcquestioner 我编辑了我的答案。希望你现在明白了!
    • 是的,现在更有意义了;非常感谢
    • 当脚本可以在当前 shell 中运行时,Shebang 并不是真正需要的。详情请见Wikipedia
    【解决方案3】:

    文件的权限是什么?为了使它可以通过执行./abc.sh 之类的操作使其可执行,它需要具有 EXECUTABLE 权限。

    你总是可以bash abc.sh

    Linux permissions overview

    Linux中的文件名在执行能力方面没有任何意义,你可以调用文件myfile.something.something,它仍然可以执行。您可以将其命名为abc,但它必须对用户、组、其他具有EXECUTABLE 权限。

    要添加该权限,您可以执行chmod +x <filename>,但您应该查看上面的链接以获得更好的理解。

    【讨论】:

    • 它有 755 个权限,但我可以把它当作 abc 使用吗?
    • 谁拥有该文件,谁在尝试使用该文件?所有这些事情在执行时都很重要,而文件名则不重要。
    • 如果您想以abc 运行它,您有多种选择,例如:(1)只需将其命名为abc 而不是abc.sh,(2)从abcabc.sh,(3) 提供一个名为 abc 的别名,引用 abc.sh (4) 创建一个 shell 脚本 abc,它运行 abc.sh,.....
    猜你喜欢
    • 2021-11-30
    • 2012-02-22
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2019-03-28
    • 2010-10-25
    相关资源
    最近更新 更多