2014-06-11 286 views
0

我有以下bash腳本。從bash腳本中將變量重新導出到環境

export KEY=A 
run_command_that_uses_KEY 
... 
export KEY=B 
run_command_that_uses_KEY 

出口出口的變量賦值子殼,即炮彈被啓動含出口指令殼的子進程。命令行環境是腳本外殼的父級,因此它沒有看到變量賦值。我如何強制父shell導出正確的密鑰?我可以在bash腳本本身或其他東西中獲取bash腳本嗎?

+0

當你看到「我如何強制父殼......」時,你似乎正在急轉彎。你想做什麼? –

+0

第二個'run_command_that_uses_KEY'仍然得到A而不是B. –

+0

你確定這是發生了什麼?它應該得到B.事實上,你只需要第一次使用'export';在那之後,shell知道它已經被導出,並且更改將被導出。 –

回答

3

這並不是您的變量未被導出的問題。你可以平凡驗證這正常工作從bash側:

export KEY=A 
bash -c 'echo $KEY' 
export KEY=B 
bash -c 'echo $KEY' 

的問題,你的情況更可能是你的程序是單個實例。

如果您使用firefoxgedit來嘗試上述操作,您會發現變量首次運行,但不是第二次運行。

這是因爲第一次,程序從頭開始,而第二次,它只是發送一個消息來打開一個新窗口的舊過程。

在再次調用之前,您可以嘗試查殺與該任務相關的所有進程。

+0

就是這樣,'run_command_that_uses_KEY'仍然得到B,但是env'KEY'是B,在之前將它殺死並且工作正常。 –