2016-05-11 48 views
1

如果我的主腳本(其中包含shebang)包含配置文件(變量在shell腳本中定義)或庫文件(具有常用函數定義),那麼是否還需要該配置shell腳本的shebang?配置或庫shell腳本需要shebang嗎?

編輯: 我正在使用配置文件。或來源 主文件包含#!/ bin/sh shebang。

+0

你如何從主腳本調用conf腳本? – heemayl

+0

@heemayl檢查編輯 – Patrick

回答

5

取決於你如何調用它。使用source.命令然後no,如果僅使用腳本名稱將它們作爲子進程調用,那麼是的。

從您的描述,然後你「採購」的文件,所以不,#!只是一個評論。從這些文件中移除執行訪問也是謹慎的,這樣它們不會被無意地稱爲子進程。

以下@triplee評論(如果它們不「來源」,則定義將只發生在子進程將是無用的)

編輯:

它們可以援引作爲一個子進程使用(例如)sh filename,bash filename,或者甚至(不寒而慄)csh filename。所有這些shell都有不同之處,因此#!行的一個優點是作爲註釋,指示代碼寫入的shell類型。儘管如此,我不會使用它,因爲這也意味着它可以作爲一個孩子運行。我相信你已經充分評論你的代碼,但是可能值得添加註釋來表示shell。

+1

另外,如果你總是用'sh script'或'bash script'顯式調用腳本,那麼shebang顯然被忽略。也許還要指出兩者不同; 'sh'具有不同的行爲,即使它是'bash'的符號鏈接。 – tripleee

+0

@tripleee:謝謝你的建議 – cdarke

+0

@tripleee它在symlinked時有什麼不同的行爲? – 123

0

#!帶翻譯,不要使用:

  1. 如果您希望使用現有的環境變量而不導出它。
  2. 當你希望包括一個配置文件到父腳本(使用source.代替)

的家當使得解釋執行其包含的家當本身(的引導機制)的腳本,這個執行過程中,與shebang的界限只被視爲評論。

由於在這種情況下產生了一個新的shell(child),舊的環境會被遺忘,而未導出的變量將被遺忘到新的shell中。