如果我在我的主脚本(有shebang)中包含了一个配置文件(shell脚本中的变量定义)或库文件(具有常用的函数定义),那么我是否还需要一个shebang用于该配置shell脚本?< / p>
编辑: 我使用包含配置文件。或来源 主文件包含#!/ bin / sh shebang。
答案 0 :(得分:6)
取决于你如何称呼它。使用source
或.
命令然后,如果仅使用脚本名称将它们作为子进程调用,则为是。
根据您的描述,您就是&#34;采购&#34;文件,所以不,#!
只是一个评论。从这些文件中删除执行访问权限也是谨慎的,因此它们不会被无意中称为子进程。
(如果他们不是&#34;来源&#34;那么这些定义只会在子进程中发生并且无用)
编辑@triplee评论:
可以使用(例如)sh filename
,bash filename
或甚至(颤抖)csh filename
将其作为子进程调用。所有这些shell都有差异,因此#!
行的一个优点是作为注释指示代码所针对的shell类型。虽然我不会用它,因为它也暗示它可以像孩子一样运行。我确定您已经充分评论了您的代码,但是可能值得添加注释以指明shell。
答案 1 :(得分:0)
#!与解说员说bash,不应该使用:
source
或.
) shebang让解释器执行包含shebang本身的脚本(一个引导机制),在执行过程中,shebang的行只被视为注释。
由于在这种情况下会产生一个新的shell(子),所以旧的环境会被遗忘,并且新的shell中将忘记未导出的变量。