shell 所有bash脚本都需要shebang吗?[duplicate]

83qze16e  于 2023-03-13  发布在  Shell
关注(0)|答案(3)|浏览(186)

此问题在此处已有答案

Should I use a Shebang with Bash scripts?(8个答案)
八年前就关门了。
假设你有一个bash脚本B,你从另一个bash脚本A获得。B有一堆变量和函数定义。A是主要的驱动脚本。你需要在A和B的顶部都有#!/bin/bash行吗?如果你这样做,会发生什么?

e37o9pze

e37o9pze1#

shebang仅对那些由操作系统以与二进制可执行文件相同的方式执行的脚本是强制性的。如果您在另一个脚本中获取源代码,则shebang将被忽略。
另一方面,如果一个脚本应该是源代码,那么按照惯例,不要在开始时放置任何shebang。

o3imoua4

o3imoua42#

如果直接将脚本作为可执行文件运行(例如使用命令./script.sh),则使用shebang。在这种情况下,它告诉操作系统运行哪个可执行文件。
例如,如果您编写了bash ./script.sh或源代码脚本,则它不是必需的,也没有任何影响。

dy1byipe

dy1byipe3#

您应该在所有脚本中使用shebang,尤其是那些使用任何非sh兼容特性的脚本。
例如在Debian中,默认的shell是破折号(不是bash)。如果你使用bash-only特性,并且没有指定这个脚本应该由bash来解释,那么即使在linux上也可能失败。在Solaris或HP-UX上几乎肯定会失败。
如果你的文件只是其他脚本的源代码,那么你可以省略shebang行,但不设置可执行权限。同样,对于这样的文件,保持/bin/sh兼容性是很好的。
我强烈推荐阅读DashAsBinSh

相关问题