新しいシェルセッションが作成されると、この変数はそれに応じて設定されます(、などにすることDISPLAY
ができます)。誤って変数を台無しにした場合は、通常、その変数をデフォルト値(設定に応じて変更)にリセットしたいと思います。:0
:1
localhost:0
DISPLAY
私の質問は、プログラムで(bashスクリプトを介して)DISPLAY
変数を取得する方法です。新しいシェルを作成するのと同じように?
他の質問/回答には通常、ハードコーディングexport DISPLAY=0:0
や同様の内容が含まれています。これは私が望むものではありません(正しいDISPLAY
変数が異なる可能性があるため)。
素直に頑張った
bash -c 'echo $DISPLAY'
サブシェルが現在のシェル変数を継承しているため動作しません
答え1
あなたはそれを確認することができます/proc/${pid}/environ
。これにはプロセスの初期環境が含まれます。
ここに$$
実行中のシェルのpidがあります。また、変数はゼロ文字で区切られます。オプションを使用-e
すると、cat
印刷できない文字(nil文字など)を印刷し、sed
nil文字表現を改行に変換します。
$ cat -e "/proc/$$/environ" | sed 's/\^@/\n/g' | grep DISPLAY
DISPLAY=:0.0
$ export DISPLAY=broken
$ cat -e "/proc/$$/environ" | sed 's/\^@/\n/g' | grep DISPLAY
DISPLAY=:0.0
答え2
正しい結果を得るための1つの方法は、次に割り当てられた変数をDISPLAY
照会することです。DISPLAY
gnome-terminal-server
cat /proc/$(pidof "gnome-terminal-server")/environ | tr '\0' '\n' | grep ^DISPLAY=