为什么不让 .txt 文件可执行而不是 .sh 文件来运行脚本?

Abh*_*jee 19 extension files executable filename file-type

我想知道有什么必要将可执行命令放在.sh文件中以制作单个脚本,因为我可以通过将命令放在.txt文件中并使用chmod.

我假设这可以通过任何文件扩展名来完成。所以,我对.sh扩展的必要性感到很困惑。任何帮助将非常感激。

Byt*_*der 48

正如您正确发现的那样,文件扩展名无需匹配任何特定内容。

在类 Unix 系统上,文件类型通常源自文件的内容(即前几个字节中的“幻数”或其他特征结构)而不是它们的名称。您也可以完全省略扩展名,这通常用于可执行文件。

检查file命令,它向您显示它可以从其内容中找到有关文件类型的信息。

对于可执行脚本,系统期望第一行中有一个所谓的“shebang”,例如

#!/usr/bin/env python3
Run Code Online (Sandbox Code Playgroud)

并指示哪个程序作为解释器运行,脚本文件作为参数。如果您在没有这样的shebang 的情况下执行文本文件,它将使用您的默认shell,即Bash 来尝试解释它。

因此,在 Unix/Linux 系统上,文件扩展名主要是提示(但不能保证)人类用户快速识别特定文件包含的内容。这也是一种约定,可以帮助例如更快地查找文件。

请注意,有一些例外,名称和扩展名很重要(例如,某些系统配置文件必须遵循命名约定,或者许多图像查看器和编辑器也需要扩展名来指示文件类型)。

您还可以查看文件扩展名是否有任何用途(对于操作系统)?

  • 文件扩展名在 shell 中无关紧要,但在 GUI 操作系统的世界中,您几乎需要它们来使双击正常工作。 (3认同)