可能的重复:
将标准输出重定向到您没有写权限的文件
echo "some words" >> /etc/apt/source.list
permission denied
sudo echo "some words" >> /etc/apt/source.list
还返回权限被拒绝
然后我想也许 append 运算符是另一个命令,我应该将 sudo 放在它之前,所以我尝试
echo "some words" >> sudo /etc/apt/source.list
还返回权限被拒绝
我应该怎么做这个任务?
Dan*_*lai 15
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 的文件,其内容为“一些词”。随意删除:-)
dan*_*ann 10
echo "some words" | sudo tee -a /etc/apt/source.list > /dev/null
Run Code Online (Sandbox Code Playgroud)
-a用于“附加到文件”;tee 通常会覆盖目标文件。见man tee。