2012-05-28 152 views
0

我是bash的新手,並試圖解決一些問題,我正在嘗試編寫代碼。保存全局變量BASH

我是在我的用戶名在終端和連接到來砸

USER$ 
USER$ bash 
bash$ 

現在在bash我節省了一些變量FE:

i=2 
k=2 
let p=$k*$i 

現在我想在室外使用這些變量bash函數

bash$exit 
USER$ 

但是現在變量不存在

我嘗試使用導出,但它並沒有真正的工作,可以使用我們的幫助,tnx

回答

2

與DOS批處理文件不同,Unix shell腳本不能直接影響其調用shell的環境。

您可以考慮使用.(dot)或source命令在調用shell的上下文中讀取和執行腳本。這意味着腳本中所做的更改確實會影響環境(通常情況下,您仍然可能遇到子shell問題)。

另一種替代方法是設置變量將腳本以name=value格式寫入調用腳本然後讀取的文件(使用.source)。

3

不可能。你不能像這樣在父進程中設置環境變量。

+0

好的,在我的操作過程中,我需要移動4個不同的服務器,每當我需要變量時,你會推薦什麼? – jarhead

1

傳統的解決方案是將設置添加到您的.profile. bashrc - 您應該使用哪個取決於您的特定需求和本地Bash配置;我的第一個建議是.profile,但是你必須避免任何bashisms,因爲這個文件與sh共享(例如,沒有let)。

對於更具體的需求,請將這些命令放在一個文件中,並在需要時輸入source。您可能還想創建一個簡單的腳本來使用當前值更新文件。

# source this file to update $HOME/stuff 

cat<<HERE>$HOME/stuff 
i='$i' 
k='$k' 
p='$p' 
export i k p 
HERE 

要在連接到遠程系統時保留變量,請查看您用於連接的工具的文檔。例如,ssh具有用於在啓動遠程會話時從本地系統導入環境變量的配置選項。