Shell-Script

POSIX shebang (#!/bin/sh) 在將文件採購到一個文件時會導致問題,無論是實際的還是理論上的問題?

  • October 30, 2020

我最近開始以更結構化的方式開發我的 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
{
...
}

我最初沒有意識到,因為它在最近版本的 Bash 和 Dash 中執行良好,我#!/bin/sh每次獲取一些函式文件時都在複製 shebang ( )。我在使用自編譯 ShellCheck 的 VS Code 中工作,我添加 shebang 的明顯原因自然是想要編輯和更新函式,而不必每次都更改語法熒光筆。


因此我的問題如下:

shebang( #!/bin/sh) 的重複是否違反了任何 POSIX shell 程式規則準則?此外,POSIX shebang ( #!/bin/sh) 的重複是否會在將文件源化為一個文件時導致問題,無論是實際的還是理論上的問題?


我昨天在 StackOverflow 上發布了這個但仍然沒有答案,但這個評論似乎很有希望:

如果 shell 命令文件的第一行以字元“#!”開頭,則結果未指定。

shebang (#!/bin/sh) 的重複是否違反了任何 POSIX shell 程式規則或指南?

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

shell 將在目前環境中執行來自文件的命令。

source ( dot) 文件*的第一行不是 shell 命令文件的第一行,*因為我們只是將它們添加到目前環境中。因此,我認為您擔心“如果 shell 命令文件的第一行以字元“#!”開頭,則結果未指定。 ”不適用。

此外,POSIX shebang (#!/bin/sh) 的重複是否會導致問題,無論是實際還是理論上?

我自己從未見過這樣的問題。在這種情況下,這#只是一個註釋標記。

引用自:https://unix.stackexchange.com/questions/617195