私は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/Lab1
env
/home/seed/Desktop
OLDPWD
LESSOPEN
LESSCLOSE
LS_COLORS
PATH