2011-09-30 79 views
8

假设你有一个bash脚本B,你从另一个bash脚本A中获取.B有一堆变量和函数定义。 A是主要的驱动程序脚本。你需要A和B之上的#!/ bin/bash行吗?如果你这样做会发生什么,如果你不这样做?你是否需要在所有bash脚本中使用shebang?

+0

你可以在这里得到答案,但你试过吗? – jman

回答

10

shebang只对那些脚本是强制性的,这些脚本应由操作系统以与二进制可执行文件相同的方式执行。如果你用另一个脚本来源,那么shebang被忽略。

另一方面。如果脚本应该是来源的,那么按照惯例,不要在开始时放置任何形状。

10

如果直接将脚本作为可执行文件运行(例如使用命令./script.sh),则会使用shebang。在这种情况下,它会告诉操作系统运行哪个可执行文件。

这不是必需的,如果您例如编写bash ./script.sh或来源脚本,则不起作用。

+1

......或者当你编写脚本时:) –

+1

如果你已经在bash提示符下,它也不是必需的 - 它假定脚本是bash(并且其他shell通常假定脚本也是为它们设计的) –

1

您应该在所有脚本中使用shebang,特别是那些使用任何非sh兼容功能的脚本。

在Debian中,例如,默认shell是破折号(而不是bash)。如果你使用bash-only特性并且不指定这个脚本应该被bash解释,它甚至可能在linux上失败。它几乎肯定会在Solaris或HP-UX上发生故障。

如果您的文件只是由其他脚本来源,那么您可以省略shebang行但不设置可执行权限。对于这样的文件也是很好的保持/ bin/sh兼容性。我们强烈建议您阅读DashAsBinSh