如何在仅具有根写许可权的文件中添加一行并继续执行脚本


9

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

代码如下:

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

是否有可能使脚本要求输入root密码,验证密码,并在成功身份验证后修改文件?然后,脚本应返回到用户模式并继续执行命令。

Answers:


13

sudo手册页中有一条提示,说明了如何执行此操作。这是我的一线客:

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

显然,您首先必须将您的用户设置为具有sudo特权。使用sh外壳程序是因为重定向到根拥有的文件。我还必须转义该echo命令使用的引号。


2

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

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

与with不同sudo,密码似乎没有被缓存su
Ryne Everett

@Ryne Everett:我对sudo不熟悉。但是,“ su”的行为实际上是OP脚本所需要的。在大多数情况下,我都以相反的方式使用“ su”:从root更改为另一个用户。在这种情况下,完全不需要密码。
miracle173

1

你可以使用teesudo

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或重定向开始整个命令(包括重定向)的一个优点sudo sh -c是,您不必以任何方式更改初始命令的引号(有时,已经包含引号的行可能会变得很丑陋)。


0

尝试此命令在Unix和Linux上可用。

sudo sh -c "echo 'add this line to the code' >> fileName"


-2

会做到的:

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

为什么ssh呢 您不需要susudo也不需要指定,root因为它是默认值。总而言之,OP希望学习一些东西,而不仅仅是解决问题,因此更多的解释会更好。
阿达芬2014年

我认为您会在双引号中遇到麻烦
miracle173
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.