在Ubuntu 13.10上,我将所有gsettings放在一个文件mygset.sh中.例如,mygset.sh包含许多行,例如
gsettings set com.canonical.Unity.Launcher favorites "['application://nautilus.desktop', 'application://firefox.desktop', 'application://chromium-browser.desktop', 'unity://running-apps', 'unity://expo-icon', 'unity://devices']"
我有一个主安装脚本,我必须使用sudo运行(例如,它执行sudo apt-get install).从我要调用的主安装脚本mygset.sh
.但是,无论我如何调用它,都不会更改我的用户的设置.我认为它正在改变root的设置.我已经尝试过(从中masterinstall.sh
运行sudo ./masterinstall.sh
):
sudo -u "wang" ./mygset.sh sudo -u "wang" bash -c ./mygset.sh
这些都不起作用(它们运行时没有错误并更改设置[我在脚本中用gsetting get检查]但不是用户"wang").
当我从命令行运行mygset.sh
(没有sudo :) bash ./mygset.sh
.它完美地运作.为什么会有这种差异,我该怎么做才能解决它masterinstall.sh
?
默认情况下,sudo将uid和gid设置为您指定的用户,但它不会更改环境设置等.
建议您-H
先尝试,将$HOME
变量设置为目标用户:
sudo -u "wang" -H ./myget.sh
如果这不起作用,请尝试-i
模拟初始登录.
稍微不同的大头针,我发现有时可以使用,是使用su
:
sudo su - wang /full/path/to/myget.sh exit
您需要使用脚本的完整路径,因为su命令会更改当前工作目录.