Instale vários ppas de uma vez via terminal sem usar script

6

Eu quero adicionar esses quatro ppa à minha máquina.

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

Em vez de adicioná-los um por vez, pensei em listá-los um após o outro, como fazemos ao instalar aplicativos.

sudo add-apt-repository ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes

Mas ele retornou um erro: Error: need a repository as argument

Eu procurei por aí e vi essa pergunta Como instalar vários PPAs e aplicativos de uma só vez? , mas propõe um script bash como uma solução.

Existe uma maneira de adicionar vários ppa ao mesmo tempo sem usar um script?

EDITAR
Estou apenas curioso, porque não faz

sudo add-apt-repository ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes

trabalho, mas

sudo apt-get install moka-icon-theme moka-icon-theme-blue moka-icon-theme-dark malys-deda awoken-icon-theme nitrux-icon-theme nouvegnomegray

funciona?

EDIT 2
Existe alguma solução alternativa onde

sudo add-apt-repository ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes

pode ser feito para trabalhar?
E eu entendo totalmente os riscos aqui.

    
por Parto 28.02.2014 / 14:59

3 respostas

8

Não funciona porque quem escreveu o script original (você pode ver, é um script python) não achou que isso pudesse ser útil.

O raciocínio pode ser que adicionar um repositório é algo que é melhor feito lentamente . Você deve verificar a assinatura, por exemplo --- e verifique se você realmente quer.

Portanto, é basicamente uma decisão de design. Você provavelmente poderia modificar facilmente o script se quisesse, ou repetindo o comando na linha de comando ...

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

(isso é um roteiro ou não? Uma rosa é uma rosa com outro nome?)

Não faça isso , mas ... unix é famoso por deixar o usuário atirar no próprio pé, então ...

Se você realmente quer que seu trabalho "multiple add-apt-repository" (1), faça isso:

1) encontre onde add-apt-repository é.

(0)samsung-romano:~% which add-apt-repository
/usr/bin/apt-add-repository

2) renomeie-o

(0)samsung-romano:~% sudo mv /usr/bin/add-apt-repository /usr/bin/add-apt-repository.real

3) substitua-o por um script simples:

(0)samsung-romano:~% sudo gedit /usr/bin/add-apt-repository 

com o conteúdo:

#! /bin/bash
# 
for i in "$@"; do
   /usr/bin/add-apt-repository.real "$i"
done

4) torná-lo executável:

(0)samsung-romano:~% chmod a+rx /usr/bin/add-apt-repository

5) e agora você pode usar o seu comando:

(0)samsung-romano:~% sudo add-apt-repository ppa:noobslab/malys-themes ppa:alecive/antigone ppa:nitrux/nitrux-artwork ppa:upubuntu-com/themes

Por que você não deve fazer isso? Porque da próxima vez haverá uma atualização para o pacote que contém o original apt-add-repository , problemas irão surgir. Como ter seu script sobrescrito ou (pior) não ter o pacote atualizado.

Na verdade, é muito melhor evitar tocar no programa do sistema e simplesmente colocar o script no seu ~/bin com outro nome, como my_aptadd . Você está agora seguro e feliz.

Ou se você gosta muito do nome original, pode criar um diretório em sua pasta pessoal como ~/override , pré-copiá-lo em seu PATH em .profile (como export PATH=$HOME/override:$PATH ) e salvar o script lá - - obviamente com o caminho completo, original /usr/bin/add-apt-repository para evitar um loop infinito. Você vai se arrepender quando alguém soltar um arquivo chamado "ls" com conteúdo exe rm $* (2), mas hey ...

Então, por que eu escrevi aqui? Porque esta é realmente uma técnica útil para "consertar" programas que de outra forma não seriam executados. Por exemplo, eu tenho isso para adicionar variáveis de ambiente a programas que de outra forma se comportarão mal, e que são chamados por outros programas que eu não posso ou não modificarei.

Notas de rodapé :

(1) Eu nunca percebi antes, mas no meu sistema existe mesmo apt-add-repository , que é um symlink para add-apt-repository . Eu posso entender o porquê, mas é uma chamada para uma bagunça esperando para acontecer ...

(2) está errado. De propósito.

    
por Rmano 28.02.2014 / 16:30
4

Já passei por isso antes de falar sobre como fazer backup dos PPAs instalados . O seguinte pega um arquivo onde todos os seus PPAs estão listados e os instala:

<~/ppa-backup.txt xargs -I % sudo add-apt-repository %

É bem trivial ajustá-lo para obter uma lista:

xargs -I % sudo add-apt-repository % <<EOF
  ppa:noobslab/malys-themes
  ppa:alecive/antigone
  ppa:nitrux/nitrux-artwork
  ppa:upubuntu-com/themes
EOF
  

Por que apt-get install ... aceita vários argumentos e add-apt-repository não?

Simplesmente porque são comandos diferentes, escritos para diferentes propósitos por pessoas diferentes. Por que less e rm não usam os mesmos argumentos? Eles são coisas diferentes.

Adicionar um monte de repos é realmente um caso extremo. Não é como querer instalar mais de um pacote de cada vez. Isso também complica a sintaxe. O add-apt-repository já possui alguns formatos diferentes, alguns incluindo espaços. Parsing que sanely é trabalho duro para acertar.

  

Existe alguma solução para fazer sua linha funcionar?

Claro. Você escreve um wrapper para add-apt-repository e prioriza ou edita o original ... Isso é uma coisa sensata a se fazer? Não, não mesmo. Você estará quebrando o add-apt-repository existente (veja acima) de uma maneira não padronizada, para quê? Para salvar as teclas digitadas em algo que você executa uma vez?

Existem vários métodos de um comando para dividir isso, como várias pessoas estão lhe dizendo. Não lute contra o sistema, use-o.

    
por Oli 07.03.2014 / 18:49
1

Tente colocar algo assim:

 sudo add-apt-repository ppa:noobslab/malys-themes & sudo add-apt-repository ppa:alecive/antigone & ...

Então, neste formato:

command & next_command & next_command

Pode funcionar.

    
por 2707974 28.02.2014 / 15:04

Tags