如何添加一行到我可以通过sudo访问的文件的末尾?

我努力了:

sudo "some string" >> test.txt 

但是我得到了许可被拒绝的警告。

谁能帮忙?

取决于你的pipe理员通过sudo给你多less访问权限。 假设你有这个权限,最简单的答案就是运行“sudo -s”来获得一个特权的shell,然后只是做你的

 echo somestring >> test.txt 

如“正常”。 如果你需要自动执行:

 sudo /bin/sh -c 'echo somestring >> test.txt' 

你所拥有的东西不会起作用的原因(除了你假设我是“echo”命令的事实外)是文件redirect发生在shell的上下文中,sudo只适用于命令你告诉它运行。

 % echo "string" | sudo tee -a test.txt 
 sudo bash -c "echo 'some string' >> test.txt" 

你原来的尝试中的问题是“>>”正在运行的shell中发生, bash打开文件,而不是由sudo运行。 在我的版本中,您将包括redirect在内的整个命令传递给由sudo运行的bash。

你可以试试:

 sudo ex +'$put =\"some string\"' -cwq foo.txt 

这是简单的就地文件编辑,它在脚本中很有用,所以你不必做任何shellpipe道。

很多人推荐这个,但是我不喜欢写stdout的副作用。 另一种方法是cat

 sh some_script.sh | sudo sh -c 'cat >> somefile.txt' 

如果cat有一个像tee的旗子这样的说法,那会更有帮助:

 sh some_script.sh | sudo pseudocat -a somefile.txt 

但不幸的是没有。