如何向只有 root 写入权限的文件添加一行并继续执行脚本

如何向只有 root 写入权限的文件添加一行并继续执行脚本

我正在尝试学习 bash 脚本。我正在解决一个实际问题,有时我需要向需要root写入权限的文件添加一行。

代码如下所示:

# some code
echo "add this line to the code" >> fileName
# some code

是否可以以某种方式让脚本询问 root 密码、验证密码并在成功验证后修改文件?然后脚本应返回到用户模式并继续执行命令。

答案1

手册页中有一个提示sudo,解释了如何执行此类操作。这是我的一句话:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

显然,您首先必须设置您的用户以获得sudo权限。使用shellsh是因为重定向到 root 拥有的文件。我还必须转义echo命令中使用的引号。

答案2

su在大多数 UNIX 系统上都可用并且应该可以工作:

su root -c 'echo "add this line to the code" >> fileName'

答案3

您可以tee使用sudo

echo "add this line to the code" | sudo tee -a filename > /dev/null

echo的输出被重定向为|(管道) 到sudo teetee读取自标准输入并写信给标准输出任何给定的文件,在本例中为filename. -a(或--append)tee追加到文件,没有它,文件将被覆盖。tee运行时它sudo会打开具有 root 权限的文件。最后,将 的输出> /dev/null抑制为tee标准输出

tee使用而不是仅仅启动整个命令(包括使用su -cor进行重定向)的一个优点sudo sh -c是,您不必以任何方式更改初始命令的引用(引用已经包含引号的行有时会变得非常难看)。

答案4

会做的伎俩:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

相关内容