2011-09-30 83 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