我想将这四个 ppa 添加到我的机器中。
sudo add-apt-repository ppa:noobslab/malys-themes
sudo add-apt-repository ppa:alecive/antigone
sudo add-apt-repository ppa:nitrux/nitrux-artwork
sudo add-apt-repository ppa:upubuntu-com/themes
我不想一次添加一个,而是想一个接一个地列出它们——就像我们安装应用程序时那样。
sudo add-apt-repository ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes
但它返回了一个错误:Error: need a repository as argument
我搜索了一下,看到了这个问题如何一次安装多个 PPA 和应用程序?但它提出了一个 bash 脚本作为解决方案。
有没有办法可以一次添加多个 ppa,而不使用脚本?
编辑
我只是好奇,为什么不
sudo add-apt-repository ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes
工作,但是
sudo apt-get install moka-icon-theme moka-icon-theme-blue moka-icon-theme-dark malys-deda awoken-icon-theme nitrux-icon-theme nouvegnomegray
作品?
编辑2
有什么解决方法吗?
sudo add-apt-repository ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes
能行得通吗?
我完全明白这其中的风险。
答案1
它不起作用,因为编写原始脚本的人(你可以看看它,它是一个 python 脚本)认为它没用。
理由可能是,添加存储库是一件慢慢来更好。例如,您应该检查签名 --- 并再三确认您是否真的想要它。
所以这基本上是一个设计决定。如果您愿意,您可以轻松修改脚本,或者在命令行上重复该命令...
for i in ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes; do sudo add-apt-repository $i; done
(这是不是剧本?玫瑰就是换了个名字的玫瑰?)
不要这样做但是...unix 以让用户搬起石头砸自己的脚而闻名,所以...
如果你确实希望你的“多个 add-apt-repository”(1) 起作用,请执行以下操作:
1)找到 add-apt-repository 的位置。
(0)samsung-romano:~% which add-apt-repository
/usr/bin/apt-add-repository
2)重命名
(0)samsung-romano:~% sudo mv /usr/bin/add-apt-repository /usr/bin/add-apt-repository.real
3)用一个简单的脚本替换它:
(0)samsung-romano:~% sudo gedit /usr/bin/add-apt-repository
内容如下:
#! /bin/bash
#
for i in "$@"; do
/usr/bin/add-apt-repository.real "$i"
done
4)使其可执行:
(0)samsung-romano:~% chmod a+rx /usr/bin/add-apt-repository
5)现在您可以使用命令:
(0)samsung-romano:~% sudo add-apt-repository ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes
为什么你不应该这么做?因为下次对包含原始 的包进行更新时apt-add-repository
,就会出现问题。例如,脚本被覆盖或(最糟糕的情况)包没有更新。
实际上,更好的方法是避免接触系统程序,只需将脚本~/bin
以另一个名称放入您的程序中,例如my_aptadd
。您现在安全又快乐。
或者,如果您真的很喜欢原始名称,您可以在主文件夹中创建一个目录,如~/override
,将其添加到 PATH 中.profile
(如export PATH=$HOME/override:$PATH
),然后将脚本保存在那里 --- 显然要使用完整路径 original/usr/bin/add-apt-repository
以避免无限循环。当有人在其中放置一个名为“ls”的文件,内容为exe rm $*
(2) 时,您会后悔的,但是嘿...
那么我为什么在这里写它呢?因为有时这确实是一种有用的技巧,可以“修复”那些否则无法运行的程序。例如,我用它来向那些否则会出错的程序添加环境变量,这些程序被我无法或不会修改的其他程序调用。
脚注:
(1) 我以前从未注意到,但在我的系统中甚至存在apt-add-repository
,它是 的符号链接add-apt-repository
。我可以理解为什么,但这预示着一场混乱即将发生……
(2)这是错误的。是故意的。
答案2
在讨论如何备份已安装的 PPA 时,我曾经讨论过这个问题. 下面获取一个列出所有 PPA 的文件并安装它们:
<~/ppa-backup.txt xargs -I % sudo add-apt-repository %
调整以获取列表非常简单:
xargs -I % sudo add-apt-repository % <<EOF
ppa:noobslab/malys-themes
ppa:alecive/antigone
ppa:nitrux/nitrux-artwork
ppa:upubuntu-com/themes
EOF
为什么
apt-get install ...
接受多个参数而add-apt-repository
不能?
因为它们是不同的命令,由不同的人出于不同的目的编写。为什么不less
采用rm
相同的参数?它们是不同的东西。
添加一堆存储库确实是一种极端情况。这不像是想要一次安装多个软件包。这也使语法变得复杂。add-apt-repository 已经采用了几种不同的格式,其中一些包含空格。要正确解析这些格式很难。
有没有什么解决方法可以使您的线路正常运行?
当然。你要么写一个包装器add-apt-repository
并对其进行优先级排序,要么编辑原始版本... 这样做合理吗?不,根本不合理。你会add-apt-repository
以非标准的方式破坏现有的(见上文),为了什么?为了节省你运行一次的按键次数?
有多种一键式方法可以将其拆分,很多人都这么说。不要与系统对抗,而是利用它。
答案3
尝试输入如下内容:
sudo add-apt-repository ppa:noobslab/malys-themes && sudo add-apt-repository ppa:alecive/antigone && ...
或者
sudo add-apt-repository ppa:noobslab/malys-themes; sudo add-apt-repository ppa:alecive/antigone; ...
如果 ppa 是可信的,并且需要以任何方式安装,那么-y
也可以添加以强制安装
sudo add-apt-repository ppa:noobslab/malys-themes -y; sudo add-apt-repository ppa:alecive/antigone -y; ...
因此采用这种格式:
command && next_command && next_command
或者
command; next_command; next_command
它可能会起作用。