我正在尝试学习 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 tee
。
tee
读取自标准输入并写信给标准输出任何给定的文件,在本例中为filename
. -a
(或--append
)tee
追加到文件,没有它,文件将被覆盖。tee
运行时它sudo
会打开具有 root 权限的文件。最后,将 的输出> /dev/null
抑制为tee
标准输出。
tee
使用而不是仅仅启动整个命令(包括使用su -c
or进行重定向)的一个优点sudo sh -c
是,您不必以任何方式更改初始命令的引用(引用已经包含引号的行有时会变得非常难看)。
答案4
会做的伎俩:
ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"