unix shell 脚本的文件扩展名

unix shell 脚本的文件扩展名

在维基百科上,文章为.sh说:

对于 .sh 文件扩展名类型,请参阅伯恩外壳

其他 Unix shell 怎么样?

我知道舍邦 用来文件里面指示执行的解释器,但我想知道:

  • 文件扩展名与无文件扩展名的优缺点是什么?

答案1

我只会调用.sh这样的东西意思是便于携带(希望便携的)。

否则我认为隐藏语言更好。细心的读者无论如何都会在 shebang 行中找到它。 (在实践中,.bashor.zsh等后缀很少使用。)

答案2

我想说,严格来说,文件扩展名不存在“良好实践”:Unix/Linux/*BSD 文件系统本身不支持扩展名。您所说的扩展名只是单个文件名的后缀。这与 VM/CMS、VMS、MS-DOS 和 Windows 文件系统和操作系统不同,在这些系统和操作系统中,inode-moral-equivalent 中的一个特殊位置是为扩展保留的。

现在这个小抱怨已经结束了,我认为在 shell 脚本文件名上添加“.sh”或“.ksh”或“.bash”后缀有点愚蠢。程序就是程序:区分执行的内容没有任何好处。没有任何 UNIX 或 Linux 或任何内核会仅仅因为文件名后缀而决定对某个文件调用解释器。这一切都是由#!行或文件开头的一些其他“幻数”字节序列完成的。事实上,根据文件名“扩展名”决定执行什么是使 Windows 成为恶意软件磁石的因素之一。看看有多少 Windows 恶意软件诈骗涉及名为“something.jpg.exe”的文件 - 默认情况下,较新的 Windows 不显示“.exe”扩展名,并鼓励用户双击“图像”。恶意软件运行的不是图像视图。

无论如何,您可能认为直接执行的命令通常都是 shell 脚本。有时cc是一个sh脚本,firefox是一个sh脚本,startx是一个sh脚本。我不认为用“.sh”后缀标记脚本有任何认知或组织上的好处。

答案3

作为一个在多种 ?nix 环境中工作过的人,我不得不使用各种各样的 shell 进行编写。不管你相信与否,跨平台的 shell 是不一样的。因此,如果您在多个 shell 中维护个人库(必要时),那么使用扩展来识别 shell 会非常有帮助。这样,当您转移到另一个平台且 shell 略有不同时,您就知道要修改哪些脚本。 .sh .ksh .bsh .csh ...

答案4

正如你所说,Unix 文件扩展名纯粹是信息。您只需要您的脚本具有正确的 shebang 并且可执行。

您可以没有扩展名或使用.sh.

无论使用什么 shell(csh、tcsh、bash、sh...),我个人都会使用以下约定:

  • 没有系统或高级脚本的扩展(极其罕见)。
  • 经典脚本.sh,从低到高等级。

相关内容