如何在shell中执行没有.sh扩展名的文件

11

我想在Bash中执行一个没有.sh扩展名的文件。

例如:我有一个文件"abc.sh",我可以直接执行它(因为我已经添加了第一行的"#!/bin/bash"),但我希望文件名只是"abc"。


7
只需在Linux中运行chmod +x abc命令即可,文件扩展名在此无意义。 - AhmadWabbi
1
当它不在您的PATH中(变量告诉程序在哪里查找可执行程序)时,您应该像./abc一样开始(如@WasteD所提到的)。 - Walter A
3个回答

16
如果文件已经可执行为 abc.sh,那么你只需要重命名该文件即可:
mv abc.sh abc

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

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


11
在Linux中,你使用./filename来运行脚本。但是你需要执行权限:chmod 755 filename。但是你仍需要 "Shebang":
#!/bin/bash

我从这里得到了以下内容:

如果您没有将scripts目录放在PATH中,且“.”(当前目录)也不在PATH中,则可以像这样激活脚本:

./script_name.sh

一个脚本也可以由特定的shell显式执行,但通常只有当我们想要获取特殊行为,例如检查脚本是否与另一个shell一起工作或打印跟踪信息进行调试时,才会这样做:

rbash script_name.sh

sh script_name.sh

bash -x script_name.sh


这解决了我的一个问题,但是为什么./filename有效?我在谷歌上找不到任何解释。如果你想要在不改变目录的情况下执行一个目录中的脚本,比如说你在主目录中,然后你想要执行一个名为filename的脚本,它位于/some/nested/directory中,那该怎么做呢? - Question Mcquestioner
@QuestionMcquestioner 我编辑了我的答案。希望你现在明白了! - WasteD
是的,现在有点更有意义了;非常感谢。 - Question Mcquestioner
1
当脚本可以在当前 shell 中运行时,实际上并不需要 Shebang。有关详细信息,请参阅 Wikipedia - Melebius

2
这段文字是关于在Linux系统中如何使文件可执行的说明。
“文件的权限是什么?要使它能够像./abc.sh这样执行,它需要具有可执行权限。”
“你总是可以使用bash abc.sh来运行它。”
Linux permissions overview
“在Linux中,文件名并不意味着执行能力,你可以将文件命名为myfile.something.something,它仍然可以被执行。你可以将其命名为abc,但它必须对用户、组和其他人具有EXECUTABLE权限。”
“要添加该权限,您可以执行chmod +x <filename>,但您应该查看上面提供的链接以更好地理解。”

它具有755权限,但我可以将其仅用作abc吗? - Sai Kiran
谁拥有文件,谁正在尝试使用文件?所有这些事情在执行时都很重要,而文件名并不重要。 - ioneyed
1
如果你想将它作为 abc 运行,你有几个选项,例如:(1)将其命名为 abc 而不是 abc.sh,(2)从 abcabc.sh 创建符号链接,(3)提供一个别名命名为 abc,指向 abc.sh,(4)创建一个运行 abc.sh 的 shell 脚本 abc,... - user1934428

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接