我想知道将可执行命令放入.sh
文件中以制作单个脚本的需求是什么,因为我可以通过将命令放入.txt
文件中并使用使其可执行来做到这一点chmod
。
我假设可以使用任何文件扩展名来完成此操作。因此,我对.sh
扩展的需求感到困惑。任何帮助将非常感激。
.txt
.txt the.txt .txt suffix.txt结尾。 (.txt)、. txt(.txt)、. txt(.txt)。
我想知道将可执行命令放入.sh
文件中以制作单个脚本的需求是什么,因为我可以通过将命令放入.txt
文件中并使用使其可执行来做到这一点chmod
。
我假设可以使用任何文件扩展名来完成此操作。因此,我对.sh
扩展的需求感到困惑。任何帮助将非常感激。
.txt
.txt the.txt .txt suffix.txt结尾。 (.txt)、. txt(.txt)、. txt(.txt)。
Answers:
正如您正确发现的那样,文件扩展名不需要匹配任何特定的文件。
在类Unix系统上,文件类型通常是从文件的内容(即前几个字节中的“幻数”或其他特征结构)派生而来,而不是从名称中派生。您也可以完全省略扩展名,该扩展名通常是针对可执行文件执行的。
检查file
命令,它会向您显示可以从其内容中找到有关文件类型的信息。
对于可执行脚本,系统期望在第一行中有一个所谓的“ shebang”,例如
#!/usr/bin/env python3
并以脚本文件作为参数指示要作为解释器运行的程序。如果您执行的文本文件没有这种Shebang,它将使用您的默认Shell(即Bash)尝试对其进行解释。
因此,在Unix / Linux系统上,文件扩展名通常是提示(但不能保证),供人类用户快速识别特定文件所包含的内容。这也是一个约定,可以帮助例如更快地找到文件。
请注意,尽管有一些例外,但名称和扩展名很重要(例如,某些系统配置文件必须遵循命名约定,或者许多图像查看器和编辑器也需要扩展名来指示文件类型)。
您也可以看一下文件扩展名是否有任何用途(用于操作系统)?
UNIX / Linux文件名中没有文件“扩展名”或“类型”之类的东西。
正如其他人指出的那样,假定您的系统上有相关的魔术,可以使用file命令找到“类型”。UNIX / Linux文件名通常可以包含任何可用的字符,但是使用某种形式的名称约定通常会有所帮助,以便人和机器都可以对内容(以及内容的使用)做出判断。
例如,我经常使用逗号作为文件名的第一个字符来表示一个临时文件,而不是在文件名末尾使用诸如字符串“ .tmp”之类的东西。结果是一样的,文件中包含的数据可能只需要很短的时间,但名称中不需要包含“。”。其中也没有字符串“ tmp”。有时这可能具有优势,例如在分析文件名列表时。但是这是我的约定,其他人甚至可以使用“ .tmp”作为临时文件名的约定来决定另一个约定。
因此,我对您的回答是,没有UNIX / Linux文件扩展名之类的东西,而只是一组通常看起来像其他操作系统及其文件系统中使用的文件扩展名的约定。
"."
这些脚本应由外壳点缀(它们不能在子外壳中有意义地运行)。相应地,我在使用的别名/脚本中禁用了默认的“初始点=隐藏文件”约定,ls
这样我就可以看到所有文件,包括“隐藏”文件。同样在Windows上,我禁用“隐藏文件扩展名”设置。