如何从命令行将文本附加到/etc/apt/sources.list?

Mat*_*hew 73 bash

我是linux新手,刚开始学习bash.我正在使用Ubuntu 9.04,并希望从命令行向/etc/apt/sources.list添加存储库.基本上,我想这样做:

sudo echo "[some repository]" >> /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)

但是,即使我使用sudo,我也会收到此错误:

bash: /etc/apt/sources.list: Permission denied
Run Code Online (Sandbox Code Playgroud)

如何避免此错误?

lot*_*har 137

echo "[some repository]" | sudo tee -a /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)

三通命令被称为通过超级用户须藤-a参数告诉三通追加到文件,而不是覆盖它.

您的原始命令失败,因为使用>>的IO重定向将以普通用户身份完成,只有您的回显是使用sudo执行的.

调用sudo子shell就像

sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list'
Run Code Online (Sandbox Code Playgroud)

也像其他人所指出的那样有效.

  • 我发现这对于安装一些依赖项的程序员很有用; 我绝对认为这应该在StackOverflow上. (5认同)

ara*_*nid 9

shell在启动命令之前处理">","<",">>"等.所以问题是"sudo >>/etc/foo"试图在获得权限之前打开/ etc/foo进行追加.

一种方法是使用sudo启动另一个shell来做你想要的,例如:

sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list'
Run Code Online (Sandbox Code Playgroud)

或者:

echo "[some repository]" | sudo sh -c 'cat >> /etc/apt/sources.list'
Run Code Online (Sandbox Code Playgroud)

一个更简单的方法可能只是使用sudo在/ etc/file上启动编辑器:)


Nei*_*hew 8

最好使用另一个文件,/etc/apt/sources.list.d另一个答案所述.

请注意,文件名必须以.list结尾,否则将被忽略.


Mat*_*hew 1

在 Karmic 中,您可以只使用该add-apt-repository命令,至少对于 PPA 来说是这样。

例如:

sudo add-apt-repository ppa:docky
Run Code Online (Sandbox Code Playgroud)