对bash脚本使用.sh还是.bash扩展名?


36

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

如果我希望我的脚本使用bash shell,使用.bash扩展名是否确实会调用bash还是取决于系统配置/ 1st shebang行。如果两者都有效但又不同,哪个优先?

我不确定是否要以.sh结束我的脚本以仅指示“ shell脚本”,然后让第一行选择bash shell(例如#!/usr/bin/env bash),还是仅以.bash结尾(以及第1行设置) )。我希望bash被调用。


3
我认为我从未见过.bash扩展。同样,Debian的政策是在包含在其中一个bin文件夹中的文件包中不包含扩展名的脚本中。
muru 2015年

Answers:


19

使用.bash扩展名确实会调用bash还是取决于系统配置/第1 shebang行。

如果未显式使用解释器,则正在调用的解释器由shebang脚本中使用的解释器确定。如果您专门使用解释器,则解释器将不在乎您为脚本指定的扩展名。但是,该扩展名的存在使其他人非常清楚它是哪种脚本。

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

可以看到,.py对bash脚本的扩展并不能使其成为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

23

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

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

我个人不在乎脚本是sh,bash,perl还是其他东西,所以我只是以它的功能命名。我发现添加扩展名是多余的。file scriptname如果我想知道的话,我将找出文件是什么。

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


4
同样,如果脚本的实现选择发生了变化(例如,它是用Python,Perl,C ...重写的),则不带.sh-style扩展名就意味着无需重命名。(诚​​然,没有什么可以阻止C程序生成带有.sh扩展名的二进制文件,这只会造成混淆。)
Stephen Kitt,2015年

2
使用#!/usr/bin/env bash了便携性,这里讨论stackoverflow.com/a/10383546/54964
莱奥列奥波尔德·赫兹준 영

4
@wurtel(迟来的评论,好吗?)添加扩展恕我直言并不是多余的。大多数编辑器都支持基于扩展名的语法突出显示,此外,具有对文件类型的直接可见性也是有意义的。清晰度和可读性很重要。
RolfBly

@RolfBly:我使用的编辑器可以识别shebang并提供语法突出显示。清晰性很有用,但是在大多数情况下,我们想执行命令,如果我不必键入太多内容并且不必记住其实现语言,那很好。
洪特里·里芬特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.