Linux:「/usr/bin/env」と「/usr/bin/strings /proc/$$/environ」の違い

Linux:「/usr/bin/env」と「/usr/bin/strings /proc/$$/environ」の違い

私はLinuxを学んでいますが、読んだ本で次の問題を見つけました。

環境変数を印刷するには2つの方法があります。違いを説明してください。

$ /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) ここに画像の説明を入力してください。

(コマンドソース:ファイルのすべての行が別のファイルに表示されることを確認する)

ベストアンサー1

proc(5)現在、Ubuntuシステムのマニュアルには次のように記載されています/proc/[pid]/environ

このファイルには、起動時に現在実行中のプログラムが設定した初期環境が含まれていますexecve(2)

$$これは現在のシェルのPIDなので、現在のシェル/proc/$$/environの環境、つまりシェルの初期化ファイルが実行される前にシェルが起動したときの外観を含みます。

このenvユーティリティは現在の状態のまま環境を出力します。シェル初期化スクリプトが環境を変更した場合、または新しいシェル変数を環境に手動でエクスポートしたり、環境変数を設定解除したりすると、状況が異なる場合があります。

表示される情報から、現在の作業ディレクトリPWDはシェルが起動されたディレクトリですが、コマンドを実行するために/home/seedそのディレクトリに移動したことがわかります(図のように最初に移動)。また、シェルの初期化ファイルが、変数を設定して変更することがわかります。/home/seed/Desktop/Lab1env/home/seed/DesktopOLDPWDLESSOPENLESSCLOSELS_COLORSPATH

おすすめ記事