我正在编写一个必须以管理员权限(sudo)运行的bash shell脚本 .
我正在运行以下命令
sudo -u $SUDO_USER touch /home/$SUDO_USER/.kde/share/config/kcmfonts > /dev/null
sudo -u $SUDO_USER echo "[General]\ndontChangeAASettings=true\nforceFontDPI=96" >> /home/$SUDO_USER/.kde/share/config/kcmfonts
第一个命令成功并创建文件 . 但是,第二个命令会出现以下错误:
无法创建/home/username/.kde/share/config/kcmfonts:权限被拒绝
我无法理解为什么这会导致权限错误 . 我正在以调用sudo的用户身份运行该命令,因此我应该有权写入此文件 . kcmfonts文件已成功创建 .
有人可以帮我吗?
2 回答
sudo
执行命令echo "some text"
为“$ SUDO_USER” .但重定向是在您的帐户下完成的,而不是在
$SUDO_USER
帐户下 . 重定向由shell进程处理,这是您的进程,不受sudo
的控制 .试试这个:
这样,
sh
进程将由$SUDO_USER
执行,这是处理重定向的过程(并将写入输出文件) .根据命令的复杂程度,您可能需要使用转义引号和其他特殊字符来玩一些游戏 . 如果这太复杂了(可能是这样),你可以创建一个脚本:
现在它是在
$SUDO_USER
帐户下运行的./foo.sh
命令(以/bin/sh ./foo.sh
执行),它应该有权写入输出文件 .考虑这样做:
tee命令可以帮助您将输出定向到文件 . tee的
-a
选项用于追加(如>>
)没有它你会破坏文件(如>
) .您不需要使用提升的privs执行左侧(虽然它只是echo,这是一个习惯形成的好事),您只需要提升的privs来写入文件 . 因此,使用此命令,您只能提升tee的权限 .