将文件源化为一个片段时,POSIX shebang (#!/bin/sh) 的重复是否会导致问题,无论是实际的还是理论上的?

将文件源化为一个片段时,POSIX shebang (#!/bin/sh) 的重复是否会导致问题,无论是实际的还是理论上的?

我最近开始以更结构化的方式开发 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 上发布了这个,但仍然没有答案,但这个评论似乎很有希望:

如果 shell 命令文件的第一行以字符“#!”开头,则结果未指定。

答案1

重复 shebang (#!/bin/sh) 是否违反了任何 POSIX shell 编程规则或准则?

我不相信,不。查看dot同一页面上的定义:

shell 应在当前环境中执行文件中的命令。

源 () 文件的第一行dot不是shell 命令文件的第一行因为我们只是将它们添加到当前环境中。因此我认为您担心“如果 shell 命令文件的第一行以字符“#!”开头,则结果未指定。“ 不适用。

此外,在将文件源化为一个片段时,POSIX shebang (#!/bin/sh) 的重复是否会导致问题,无论是实际的还是理论上的?

我自己从未见过这样的问题。在这种情况下,这#只是一个注释标记。

答案2

不是问题。 shebang 行 ( #!/bin/bash) 看起来像是#对 的注释bash

#!仅当您启动脚本时才会解释。

相关内容