我努力了:
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
但不幸的是没有。