附加到受保护的文件

6

我想要做的事情大致是:

echo "Append string" >> protected_file

然而,由于此文件受写保护,所以我收到了一个错误。运行:
sudo echo "Append string" >> protected_file

似乎在echo命令上运行sudo,但仍然出现权限错误,我该如何附加到此文件?

1
你应该对你的shell脚本使用sudo,而不是echo命令。 - Raptor
4个回答

11
echo "Append string" | sudo tee -a protected_file >/dev/null

1
+1 for this -- 与被接受的答案不同,它不会给予任何不需要的额外权限,如果内容是由比echo更复杂的东西生成的话,这一点非常重要。 - Charles Duffy
1
为什么需要使用 >/dev/null? - Richard
1
@Richard:因为tee命令会将输出发送到文件和标准输出(两个位置 - 就像管道中的“tee”一样),而我们不需要额外的输出。将标准输出重定向到/dev/null可以将其丢弃。 - Dennis Williamson

3

直接回答问题:

sudo sh -c 'echo "Append string" >> protected_file'

但是我原则上同意ShivanRaptor的看法。

解释: >> 是一个shell操作符。如果您调用 sudo command,您不会运行另一个shell; 因此,您不能在不重定向 sudo 的情况下重定向 echo (最终,这会在重定向时给您错误的用户ID)。诀窍是在 sudo 中启动一个单独的shell,在其中可以发出重定向操作符。


谢谢,但这只是我在命令行上编写的单个命令,而不是在shell脚本中。 - Richard

0

或者尝试这个:

echo "echo 'append string' >> protected_file" | sudo bash

0

将所有内容整合在一起并修复其中一个答案,有三种方法:

sudo su root -c "echo 'append string' > protected_file"
echo "echo 'append string' >> protected_file" | sudo bash
echo "append string" | sudo tee -a protected_file >/dev/null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接