以下示例脚本在使用 sudo 执行时无法获取桌面环境 (DE)。如何使用使用 sudo 执行的 bash 脚本获取 DE?
#!/bin/bash
echo $DESKTOP_SESSION
echo $XDG_SESSION_DESKTOP
echo $XDG_CURRENT_DESKTOP
echo $SESSION
echo $MDMSESSION
echo $GDMSESSION
在 Xubuntu 和 Mate 上测试,返回的是空。
user:~$ sudo bash '/path/sample.sh'
user:~$ bash '/path/sample.sh'
mate
mate
MATE
mate
user:~$
答案1
您需要将-E
选项传递给sudo
:
-E,--保留-环境
向安全策略表明用户希望保留其现有的环境变量。如果用户没有保留环境的权限,安全策略可能会返回错误。
- 参见man sudo
(或在线的)。
并运行你的脚本
sudo -E '/path/sample.sh'
答案2
顺便说一句,在 2021 年,你只想使用官方的$XDG_CURRENT_DESKTOP
。请注意,这是一个冒号分隔列表(例如$PATH
),因此不要假设它只包含单个值(即使在大多数 DE 中都是如此)。如果您更喜欢处理单个值,请使用$XDG_SESSION_DESKTOP
。
官方标准:
有关更多详细信息,包括用于解析和测试桌面环境的 bash 函数,请参阅https://unix.stackexchange.com/a/645761/4919