答案1
我只会调用.sh
这样的东西意思是便于携带(希望是便携的)。
否则我认为隐藏语言更好。细心的读者无论如何都会在 shebang 行中找到它。 (在实践中,.bash
or.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
,从低到高等级。