通过终端一次性安装多个 ppa,无需使用脚本

通过终端一次性安装多个 ppa,无需使用脚本

我想将这四个 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

它可能会起作用。

相关内容