哦......也許標題是不是真的很容易理解。所以讓我們稍微描述一下:如何將bash變量從提示中的函數導出到父shell?
在.bashrc
文件中,我設置了PS1
以獲得自定義提示。在這個提示中,我需要一些額外的信息,我從其他特定功能中獲得。這個函數需要一些時間來執行,所以在控制檯中按回車後等待1秒並不酷。但我有想法緩存來自這個特定函數的返回值。
我需要檢查緩存標誌在每個提示打印,所以我不能使用變量,我必須打印提示符下使用功能,因爲sourceing .bashrc
只有一個時間,但如果我通過功能PS1
它每次都會被execed。
prompt_fun(){ export CACHE_YES=1 export PROMPT_CACHE="Something" echo "$PROMPT_CACHE" #in real case here will be checking if cache is turned on. #If yes, we use cached value from exported variable in first time. #If no, we exec specific function and export values to env variables. } PS1="$(prompt_fun): "`
當然,可變CACHE_YES
和PROMPT_CACHE
在控制檯未設置,所以我無法控制緩存被改變CACHE_YES
。我知道,當緩存應該改變,所以我可以輸入控制檯更改CACHE_YES=0
但我的腳本不緩存後,新的價值觀它重新改變對CACHE_YES=1
。
如何使export
在prompt_fun
具有全球影響?
子進程不能直接影響其父進程中的環境變量。一種可能性可能要經過文件系統......你那神祕的過程,需要在第二個也許可以寫入到文件系統中的某個地方,你的prompt_fun()可以讀取它。 –
有區別?如果我使用命令獲取需要在提示中打印的信息,那麼我使用命令獲取信息將其寫入文件並將其讀回來?或者,也許你的意思是緩存標誌發送到文件並從文件中讀取它們?可能這會起作用,但我不確定每次打印提示時讀取文件的時間。 Elegance解決方案不應該創建臨時文件,因爲在所有的相同臨時緩存文件的多重命令行上工作也會出現問題。 – senfen