配置或库shell脚本需要shebang吗?

时间:2016-05-11 06:48:23

标签: bash shell shebang

如果我在我的主脚本(有shebang)中包含了一个配置文件(shell脚本中的变量定义)或库文件(具有常用的函数定义),那么我是否还需要一个shebang用于该配置shell脚本?< / p>

编辑: 我使用包含配置文件。或来源 主文件包含#!/ bin / sh shebang。

2 个答案:

答案 0 :(得分:6)

取决于你如何称呼它。使用source.命令然后,如果仅使用脚本名称将它们作为子进程调用,则为是。

根据您的描述,您就是&#34;采购&#34;文件,所以不,#!只是一个评论。从这些文件中删除执行访问权限也是谨慎的,因此它们不会被无意中称为子进程。

(如果他们不是&#34;来源&#34;那么这些定义只会在子进程中发生并且无用)

编辑@triplee评论:

可以使用(例如)sh filenamebash filename或甚至(颤抖)csh filename将其作为子进程调用。所有这些shell都有差异,因此#!行的一个优点是作为注释指示代码所针对的shell类型。虽然我不会用它,因为它也暗示它可以像孩子一样运行。我确定您已经充分评论了您的代码,但是可能值得添加注释以指明shell。

答案 1 :(得分:0)

#!与解说员说bash,不应该使用:

  1. 如果您希望在不导出的情况下使用现有环境变量。
  2. 如果您希望将配置文件包含在父脚本中(请改用source.
  3. shebang让解释器执行包含shebang本身的脚本(一个引导机制),在执行过程中,shebang的行只被视为注释。

    由于在这种情况下会产生一个新的shell(子),所以旧的环境会被遗忘,并且新的shell中将忘记未导出的变量。