我应该把 sudo 放在这个命令的哪里?

我应该把 sudo 放在这个命令的哪里?

可能的重复:
将标准输出重定向到您没有写入权限的文件

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 

相关内容