2016-08-23 28 views
0

我們有父bash腳本猛砸限制父腳本的命令行參數發揚孩子的腳本參數

parent_source.bash

#!/bin/bash 

source child_test.bash 

的child_test.bash內

echo [email protected] 
#Doing some validation checks for [email protected], for child_script command line arguments are optional 

凡當執行

source parent_source.bash one two 

子腳本在$ @中使用「one」和「two」,因此驗證失敗,它不會被視爲給子腳本的零參數。子腳本假設它有2個命令行參數。

但是,如果我們給孩子的命令行參數也工作正常。

可能有人請幫助我們

感謝

+0

我們在child_test.bash出口PYTHONPATH出口路徑下等這麼多的出口語句,如果我們使用./這些都不是在當前shell反映,我們必須使用僅來源。有沒有可能實現這一點。 –

回答

0

當執行source命令,你實際上注入的child_test.bash內容到你的parent_source.bash腳本,然後,當執行在child_test.bash第一線,即:

echo [email protected]

它實際上指的是傳遞給父代息的論據因爲該命令的範圍實際上是parent_source.bash腳本。

我建議執行腳本而不將內容注入父腳本。

事情是這樣的:

parent_source.bash

#!/bin/bash 

./child_test.bash 

child_test.bash

echo [email protected] 
#Doing some validation checks for [email protected], for child_script command line arguments are optional 
+0

感謝您的回覆但我們在child_test.bash導出PYTHONPATH導出PATH等中有很多導出語句,如果我們使用./這些不在當前shell中反映,我們只能使用源代碼。有沒有可能實現這一點。 –

+0

在獲取子腳本之前,您可以使用'set --'。 –

+0

它對我來說很好,是否有任何解決方案可以修復'child_test.bash'而不是父腳本。一般來說,我們將提供子腳本,客戶將編寫自己的腳本,以便通過一些額外操作來獲取所有子腳本。 –

0

因爲source的-ing時從父母孩子劇本,環境父腳本的shell正在被傳播給子腳本的內容。 因此,提供給父腳本的參數可用,並在子腳本上以[email protected]加速擴展。

您可以將參數保存到數組中的父腳本,然後在獲取子腳本之前取消設置位置參數,以防止它們對兒童可用。因此,父腳本可以採取以下形式:

args=([email protected]) 
set -- 
source child_test.sh 
+0

它對我來說很好,是否有任何解決方案來修復child_test.bash而不是父腳本。通常,我們將提供子腳本,其他用戶將編寫自己的腳本,以便通過一些額外的操作來獲取所有子腳本 –