(看使用 #!/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"
请注意,.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
答案2
脚本的命名与其运行方式无关。
shebang 行定义了用于运行脚本的解释器。
我个人并不关心脚本是 sh、bash、perl 等,所以我只是根据它的功能来命名它;我发现添加扩展是多余的。如果我想知道的话,我会file scriptname
找出该文件是什么。
因此,如果您希望脚本以 运行bash
,请使用#!/bin/bash
作为第一行。