2013-10-25 59 views
2

例如,我有一個主外殼程序main.sh,並且我有另一個子shell程序sub.sh。我想將一個變量var傳遞給subshel​​l,但我不想使用命令行參數。一個例子代碼如下:如何傳遞參數到一個子shell(通過執行,而不是源)沒有命令行參數?

#In main.sh 
a=1 
./sub.sh 

#In sub.sh 
echo $a 

我想看到的輸出:1

我知道這個問題很奇怪,不過這個功能最適合我的需要。我無法獲得sub.sh,因爲在實際的程序中,我有很多變量可以通過...謝謝!

編輯:如果我運行的背景和sub.sh,它需要10個小時,我想運行其他sub.sh在前臺的另一個變量b

回答

2

你只需要一個額外的換行符的環境:

#In main.sh 
a=1 ./sub.sh 

這是與1_CR的答案相同,但是展示了將值傳遞給環境的技術而不是修改當前環境以使sub.sh繼承。

由於這是對環境的每個進程的修改,因此您可以根據需要進行重複。

a=1 ./sub.sh & 
a=3 b=9 ./sub.sh & 

sub.sh每個實例看到了a不同的值,以及第二個實例看到了b的值也是如此。

+0

請看看我的編輯 –

3

你可以只導出變量a

a=1 
export a 
./sub.sh 

這將導致a將在隨後執行的命令

+0

如果我在背景中運行sub.sh並且需要10個小時,並且我想在另一個變量b的前臺運行另一個sub.sh,該怎麼辦? –

+0

@ return0,這聽起來像你可能需要chepner的解決方案 – iruvar