bash 脚本使用 .sh 或 .bash 扩展名?

Mic*_*ant 39 shell bash shebang

(有关Ubuntu-OSX 兼容性和易用性以及 POSIX,请参阅使用 #!/bin/sh 或 #!/bin/bash

如果我希望我的脚本使用 bash shell,那么使用 .bash 扩展名实际上是调用 bash 还是依赖于系统配置/第一个 shebang 行。如果两者都有效但不同,哪个优先?

我不确定是否用 .sh 结束我的脚本以仅指示“shell 脚本”,然后让第一行选择 bash shell(例如#!/usr/bin/env bash),或者是否只用 .bash 结束它们(以及第 1 行设置) )。我想调用 bash。

wur*_*tel 24

脚本的命名与它的运行方式无关。

shebang 行定义了用于运行脚本的解释器。

我个人并不关心脚本是 sh、bash、perl 还是什么,所以我只是根据它的作用来命名它;我发现添加扩展是多余的。file scriptname如果我想知道,我会找出文件是什么。

所以,如果你希望你的脚本与运行bash,使用#!/bin/bash作为第一线。

  • 此外,如果脚本的实现选择发生变化(假设它是用 Python、Perl、C 重写的),没有 `.sh` 样式的扩展名意味着不需要重命名它。(诚​​然,没有什么可以阻止 C 程序生成带有 `.sh` 扩展名的二进制文件,它只会令人困惑。) (4认同)
  • @wurtel(迟来的评论,好吗?)添加扩展 imho 绝非多余。大多数编辑器都支持基于扩展名的语法高亮显示,而且可以立即查看文件类型。清晰度和可读性很重要。 (4认同)
  • 使用 `#!/usr/bin/env bash` 实现可移植性,这里讨论 http://stackoverflow.com/a/10383546/54964 (2认同)

Cit*_*ght 22

使用 .bash 扩展名实际上是调用 bash 还是取决于系统配置/第一个 shebang 行。

如果您没有明确使用解释器,那么被调用的解释器由shebang脚本中使用的决定。如果您专门使用解释器,那么解释器并不关心您为脚本提供的扩展名。但是,扩展名的存在是为了让其他人非常清楚它是什么类型的脚本。

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"
Run Code Online (Sandbox Code Playgroud)

看,.py对 bash 脚本的扩展并没有使它成为 python 脚本。

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

它总是一个bash脚本。

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script
Run Code Online (Sandbox Code Playgroud)