Linux

Linux:“/usr/bin/env”和“/usr/bin/strings /proc/$$/environ”之間的區別

  • May 7, 2022

我正在學習 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/seedshell 啟動時,但您移動/home/seed/Desktop/Lab1到執行env命令時(首先移動到/home/seed/Desktop,如 所示OLDPWD)。我們還可以看到您的 shell 的初始化文件設置LESSOPENLESSCLOSELS_COLORS修改了PATH變數。

引用自:https://unix.stackexchange.com/questions/699459