可能的重复:
将标准输出重定向到您没有写入权限的文件
echo "some words" >> /etc/apt/source.list
permission denied
sudo echo "some words" >> /etc/apt/source.list
也返回权限被拒绝
然后我想也许追加操作符是另一个命令,我应该把 sudo 放在它前面,所以我尝试
echo "some words" >> sudo /etc/apt/source.list
也返回权限被拒绝
我该怎么做这个任务?
答案1
sudo sh -c 'echo "some words" >> /etc/apt/source.list'
sudo echo "some Words" >> /etc/apt/source.list 不起作用的原因是 sudo 提高了 'echo' 命令的权限,而不是重定向。
>> 重定向导致当前 shell 创建/追加到文件。它会失败,因为您的 shell 无权执行此操作。
我的答案有效的原因是您正在一个已 sudo 的新 shell 中运行整个过程(回显和重定向)。sh -c ...
调用一个新的 shell 并运行该子 shell 中给出的命令。前面的 sudo 使该子 shell 以升级的权限运行。
第二个 sudo 示例没有意义,因为 sudo 需要一个命令来运行,而这不是您传递的内容。我敢打赌,您现在在本地目录中有一个名为 sudo 的文件,其内容为“一些单词”。请随意删除它:-)
答案2
echo "some words" | sudo tee -a /etc/apt/source.list > /dev/null
-a
用于“附加到文件”; tee 通常会覆盖目标文件。看man tee
。
答案3
使用cat 有什么问题吗?
sudo cat >> /etc/apt/source.list
some words
^D
但我喜欢用丹尼尔说的 T 恤:-)
答案4
echo "some words" | sudo cat >> /etc/apt/source.list