创建新的 shell 会话时,DISPLAY
会相应地设置该变量(可以是:0
、:1
、localhost:0
等)。如果我不小心弄乱了DISPLAY
变量,通常我希望将其重置为默认值(该值根据设置而变化)。
我的问题是,如何以编程方式(通过 bash 脚本)获取DISPLAY
变量就像创建新 shell 时一样?
其他问题/答案通常只涉及硬编码export DISPLAY=0:0
或类似的东西,这不是我想要的(因为正确的DISPLAY
变量可能不同)
我天真的尝试
bash -c 'echo $DISPLAY'
不起作用,因为子 shell 继承了当前的 shell 变量
答案1
你可以检查一下/proc/${pid}/environ
。其中包含进程的初始环境。
这里,$$
是正在运行的 shell 的 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
我可以获得正确结果的一种方法DISPLAY
是查询DISPLAY
分配给gnome-terminal-server
以下内容的变量
cat /proc/$(pidof "gnome-terminal-server")/environ | tr '\0' '\n' | grep ^DISPLAY=