如果我在主脚本中包含了一个配置文件(shell脚本中定义的变量)或库文件(具有常见函数定义),那么该配置shell脚本是否也需要shebang呢?
编辑: 我使用“.”或“source”来包含配置文件 主文件包含#!/bin/sh shebang。
编辑: 我使用“.”或“source”来包含配置文件 主文件包含#!/bin/sh shebang。
source
或.
命令,则不需要,如果只使用脚本名称作为子进程调用它们,则需要。#!
只是一个注释。还可以明智地从这些文件中删除执行访问权限,以免意外将它们称为子进程。sh filename
,bash filename
或甚至(打颤)csh filename
等方式调用为子进程。所有这些 shell 都有差异,因此 #!
行的一个好处是作为一条注释,指示代码编写为哪种 shell 类型。虽然我不会因此而使用它,因为它还意味着它可以作为子进程运行。我相信您已经充分注释了代码,但可能值得添加注释以指示 shell。#! 不应该与解释器(如bash)一起使用:
source
或 .
)shebang 使解释器执行包含 shebang 的脚本(引导机制),在此执行期间,带有 shebang 的行仅被视为注释。
由于在这种情况下生成了一个新的 shell(子 shell),旧环境被遗忘,并且未导出的变量将在新 shell 中被遗忘。
sh script
或者bash script
来显式地调用脚本,那么shebang显然会被忽略。此外,也许需要指出这两者是不同的;即使sh
是bash
的符号链接,它们的行为也是不同的。 - tripleeesh -> bash
。这是UNIX系统上非常常见的设备,例如(ls -l /bin
)我们有一个程序具有另一个程序特性的超集。它减少了代码维护的工作量。例如,在Linux上,经常看到awk -> gawk
。这也允许向后兼容性,几乎没有人使用原始的awk
代码,通常使用nawk
或gawk
,但删除awk
将破坏成千上万个脚本。特别是当调用awk
时,gawk
具有许多有用的扩展功能是不可用的。 - cdarke