我是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)
也像其他人所指出的那样有效.
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上启动编辑器:)
在 Karmic 中,您可以只使用该add-apt-repository
命令,至少对于 PPA 来说是这样。
例如:
sudo add-apt-repository ppa:docky
Run Code Online (Sandbox Code Playgroud)