2013-02-20 60 views

回答

2

你不能。更好的解釋可以在unix stackexchange section here找到!

shell變量可能不適合您嘗試實現的用途。也許你想用文件代替。

6

你可以設置你的會話保持在上DEBUG設置陷阱重讀磁盤上的文件的.bashrc

trap 'source ~/.myvars' DEBUG 

如果離開終端A開放,運行在終端B echo VAR=42 >> ~/.myvars,然後切換回到終端A和echo $VAR,它會「神奇地」被設置。

+1

一個創造性的解決方案。儘管你可能想記住在它傳播到你想要的地方後將它移除,或者它會將該變量鎖定到該值。 – Kevin 2013-02-21 14:26:59

3

您似乎誤解了export的功能。它所做的只是將一個本地變量移動到該進程中的環境塊中(/proc/$$/environ)。

當創建一個新進程(一個fork)時,程序數據區域(包括環境塊)被複制到新進程(實際上它們最初是共享的,然後在寫入時複製)。當運行不同的程序(execve)時,默認情況下,環境塊將保留來自前一個程序。另請參閱env(1)計劃。

因此,環境變量通常從其父進程繼承(複製)。把一個新的環境變量變成一個正在運行的過程的唯一方法是使用某種接種技術,就像調試器會做的那樣。編寫這樣的程序不是一件容易的事,我相信你可以想象安全性的影響。

+0

'/ proc'中的'environ'條目只反映了進程開始時的環境,並且不會隨着新環境變量的添加/更改而更新。 – 2013-07-02 13:06:57