我最近开始以更结构化的方式开发 Linux POSIX shell 脚本。
让我解释:
代码[A]是由一些代码 [B] 获取的,只是一些最小的例子:
#!/bin/sh
# REQUIREMENTS
# none
# METHODS (public)
# none; this file when sourced sets up basic tput colors, if available
...
代码[B]正在执行,同样是一些最小的例子如下:
#!/bin/sh
# REQUIREMENTS
. /home/username/Development/sh/functions/func-color_support
# METHODS (public)
print_error ()
# this prints custom heading and a given error message
{
...
}
#!/bin/sh
我最初没有意识到,因为它在最新版本的 Bash 和 Dash 中工作得很好,所以每次我获取一些函数文件时,我都会复制 shebang ( )。我正在使用自编译的 ShellCheck 和 VS Code 进行工作明显的我添加 shebang 的原因自然是想要编辑和更新函数,而不必每次都更改语法荧光笔。
因此我的问题如下:
重复 shebang ( #!/bin/sh
) 是否违反任何 POSIX shell 编程规则或者指导方针?此外,在将文件源化为一个片段时,POSIX shebang ( ) 的重复是否会#!/bin/sh
导致实际或理论上的问题?
我昨天在 StackOverflow 上发布了这个,但仍然没有答案,但这个评论似乎很有希望:
- 见2.1.1这里, 引用:
如果 shell 命令文件的第一行以字符“#!”开头,则结果未指定。
答案1
重复 shebang (#!/bin/sh) 是否违反了任何 POSIX shell 编程规则或准则?
我不相信,不。查看dot
同一页面上的定义:
shell 应在当前环境中执行文件中的命令。
源 () 文件的第一行dot
不是shell 命令文件的第一行因为我们只是将它们添加到当前环境中。因此我认为您担心“如果 shell 命令文件的第一行以字符“#!”开头,则结果未指定。“ 不适用。
此外,在将文件源化为一个片段时,POSIX shebang (#!/bin/sh) 的重复是否会导致问题,无论是实际的还是理论上的?
我自己从未见过这样的问题。在这种情况下,这#
只是一个注释标记。
答案2
不是问题。 shebang 行 ( #!/bin/bash
) 看起来像是#
对 的注释bash
。
#!
仅当您启动脚本时才会解释。