shell 如何/在哪裡儲存環境變數?
所以有 $ PWD, $ 小路, $ USERNAME and all that. I’ve been working on my own shell and I’ve just today introduced environment variables. The way I’m doing it is by creating strings called pwd, path and all so when there’s a command to echo, say, $ PWD 我告訴它列印密碼。這和 bash 做的一樣嗎?我還沒有設置環境變數的規定,但我想我會努力的。我的主要問題是實際的貝殼在哪里以及如何做到這一點。
另一個有點相關的問題,printenv 與這一切有什麼關係?因為 printenv 是一個二進製文件,它總是列印 bash 環境變數,而不是我目前用來執行它的 shell(顯然,它如何檢測我設置為我的路徑的程序中的字元串和密碼)那麼它從哪裡得到這些?
shell 可以以任何它想要的方式儲存環境變數。這並不相關。相關的是,shell 應該能夠通過系統呼叫將環境傳遞給子程序(包括
printenv
) 。execve
參見man 7 environ。當您的 shell 執行另一個程序時——通過任何風格的exec (3)——該程序繼承其前身的環境。一種方便的 shell 設計可能是保留兩個列表:導出的和未導出的 shell 變數。導出的那些可以使用putenv (3) 在 shell 自己的環境中維護,並由 shell 創建的任何程序自動繼承。那些未導出的可以在一個單獨的列表中,只能由 shell 訪問。
如果您對這類事情感興趣,您可能會發現Michael Kerrisk 的 The Linux Programming Interface是一個有用的參考。