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

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

(看使用 #!/bin/sh 或 #!/bin/bash 实现 Ubuntu-OSX 兼容性以及易用性和 POSIX

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

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

我希望调用 Bash。

答案1

使用 .bash 扩展名实际上会调用 bash 还是依赖于系统配置/第 1 个 shebang 行。

如果您不显式使用解释器,则调用的解释器由“舍邦”在脚本中使用(#!-line,必须是脚本文件的第一行)。

另一方面,如果您显式使用解释器,那么解释器并不关心您为脚本提供的扩展名。然而,该扩展的存在是为了让其他人非常清楚它是什么类型的脚本。

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a Bash script"

请注意,.pyBash 脚本的扩展并不使其成为 Python 脚本。

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a Bash script"
                                ^
SyntaxError: invalid syntax

它始终是 Bash 脚本。

[sreeraj@server ~]$ ./ext.py
Hi. I am a Bash script

答案2

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

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

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

因此,如果您希望脚本以 运行bash,请使用#!/bin/bash作为第一行。

相关内容