随着 Natty 即将推出,我一直在更新我的部署和自我配置脚本,以使我的 11.04 桌面能够按照我想要的方式运行和显示。
令人沮丧的是,dbus 似乎已经改变,并且不允许像 Lucid 和 Maverick 那样使用 grep 和 cat 通过终端调用对当前用户进行身份验证。
理想情况下,要运行该脚本,我会使用 sudo -s,然后将其启动为
# chmod +x install && ./install
它不再返回我的用户名,而是返回根并将更改应用于根配置文件,并且在路径不对应时中止。
这是我的脚本头:
#!/bin/bash
ON_USER=$(echo ~ | awk -F'/' '{ print $1 $2 $3 }' | sed 's/home//g')
export $(grep -v "^#" ~/.dbus/session-bus/`cat /var/lib/dbus/machine-id`-0)
if sudo -u $ON_USER test -z "$DBUS_SESSION_BUS_ADDRESS" ;
then eval `sudo -u $ON_USER dbus-launch --sh-syntax --exit-with-session`
fi
RELEASE=$(lsb_release -cs)
既然 natty 已经到来,我怎样才能让它返回实际用户呢?
谢谢您的帮助
答案1
听起来好像正在脚本环境中$HOME
进行更改。尝试使用/root
$SUDO_USER
而不是$ON_USER
,并且$(eval echo ~$SUDO_USER)
代替~
:
ak@myo5a:~$ echo "$(grep -v "^#" ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-0)"
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-qH8a0TOc6f,guid=873a5a81a7abe448ef2c293000000012
DBUS_SESSION_BUS_PID=2013
DBUS_SESSION_BUS_WINDOWID=8388609
ak@myo5a:~$ sudo -sH
root@myo5a:/home/ak# echo "USER=$USER; HOME=$HOME; SUDO_USER=$SUDO_USER; SUDO_HOME=$(eval echo ~$SUDO_USER)"
USER=root; HOME=/root; SUDO_USER=ak; SUDO_HOME=/home/ak
root@myo5a:/home/ak# echo "$(grep -v "^#" $(eval echo ~$SUDO_USER)/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-0)"
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-qH8a0TOc6f,guid=873a5a81a7abe448ef2c293000000012
DBUS_SESSION_BUS_PID=2013
DBUS_SESSION_BUS_WINDOWID=8388609
root@myo5a:/home/ak# sudo -u $SUDO_USER touch /cant_touch_this
touch: cannot touch `/cant_touch_this': Permission denied