Linux:“/usr/bin/env”和“/usr/bin/strings /proc/$$/environ”之間的區別
我正在學習 linux,我在閱讀的一本書中遇到了一個問題:
以下是列印環境變數的兩種不同方式。請描述它們的區別:
$ /usr/bin/env $ /usr/bin/strings /proc/$$/environ
我在Google和書中都進行了搜尋,我發現的所有內容都表明這兩種方法都會列印出目前程序的環境變數,但是當我嘗試執行它們時,我看到了差異,但我不知道為什麼。
使用以下命令:
/usr/bin/env > file1 /usr/bin/strings /proc/$$/environ > file2
現在我想看看文件之間的一些區別,所以我對行進行排序並檢查 file1 中的行是否沒有出現在 file2 中,反之亦然
結果
comm -13 <(sort -u file1) <(sort -u file2)
是當我使用
comm -13 <(sort -u file2) <(sort -u file1)
(命令來源:檢查文件的所有行是否出現在不同的文件中)
從
proc(5)
目前 Ubuntu 系統的手冊中,描述/proc/[pid]/environ
:該文件包含目前執行的程序通過 啟動時設置的初始環境
execve(2)
。由於
$$
是目前 shell 的 PID,/proc/$$/environ
將包含目前 shell 的環境,即在執行任何 shell 的初始化文件之前 shell 啟動時的外觀。該
env
實用程序將以目前外觀的方式輸出環境。如果您的 shell 的初始化腳本修改了環境,或者您手動將新的 shell 變數導出到環境中或未設置環境變數,這可能會有所不同。從您顯示的資訊中,我們可以看到目前工作目錄
PWD
是/home/seed
shell 啟動時,但您移動/home/seed/Desktop/Lab1
到執行env
命令時(首先移動到/home/seed/Desktop
,如 所示OLDPWD
)。我們還可以看到您的 shell 的初始化文件設置LESSOPEN
、LESSCLOSE
和LS_COLORS
修改了PATH
變數。