Melhor maneira de adicionar alternativas usando update-alternatives?

12

Sinto muito pela minha má escrita, não sou um falante nativo.

Eu procurei o manual de update-alternatives várias vezes, mas não consigo descobrir como mostrar o link atual apontando para uma alternativa específica, e essa informação é necessária ao adicionar uma nova alternativa.

Do manual update-alternatives :

--install <link> <name> <path> <priority>

Digamos que eu queira adicionar uma nova versão do Java Runtime Edition, mas não conheço o symlink atual vinculado à alternativa ( <link> parameter). O que eu faço atualmente é:

sudo update-alternatives --install /tmp/randomStuff java /usr/local/java/jre1.7.0_25/bin/java 0

Esse comando será exibido:

update-alternatives: renaming java link from /usr/local/bin/java to /tmp/randomStuff.

Lendo a saída, descubro o link antigo que estava apontando para a alternativa, para que eu possa finalmente executar meu comando novamente com o parâmetro <link> correto, alterando /tmp/randomStuff para /usr/local/bin/java :

sudo update-alternatives --install /usr/local/bin/java java /usr/local/java/jre1.7.0_25/bin/java 0

Isso funciona bem, mas, como você pode ver, executar o comando com /tmp/randomStuff como o parâmetro <link> é muito complicado.

Então, eis as perguntas: (1) Existe algum update-alternative de argumentos que podem mostrar o link atual que está apontando para uma alternativa específica, ou (2) existe uma maneira de instalar uma nova alternativa sem ter que fornecer um novo parâmetro, simplesmente mantendo o atual <link> ?

Obrigado pela sua ajuda.

    
por pagliuca 06.07.2013 / 17:24

2 respostas

10

Para responder sua primeira pergunta, gostaria de sugerir a você --query :

   --query name
          Display information about the link group like --display does, but in a machine parseable way (see section QUERY FORMAT below).

Armado com isso, você receberá a origem do link, por exemplo, no meu caso para java:

usr@srv % update-alternatives --query java
Name: java
Link: /usr/bin/java
[...]

Então, você vê minha cadeia como /usr/bin/java -> /etc/alternatives/java -> ... .

Infelizmente, não tenho uma resposta para sua segunda pergunta. Eu tenho procurado por uma solução para isso há algum tempo, mas parece que não há solução simples, ainda. O que você poderia fazer é escrever um hack para analisar a saída da chamada --query , talvez assim:

update-alternatives --query java | /bin/grep Link | cut -f 2 -d " "

que você poderia usar como entrada para a chamada --install . Mas, como isso é bastante confuso, não recomendo. Em vez disso, você pode querer dar uma olhada em galternatives , um front-end para o sistema de alternativas. Mesmo que eu não goste de usar material gráfico para esses trabalhos básicos, é bastante conveniente e acabei usando esta ferramenta em vez das ferramentas de linha de comando.

EDITAR

Eu tenho curiosidade de saber como o update-alternatives sabe qual é o link simbólico do comando e deu uma pequena olhada nas fontes. É claro que o sistema de alternativas tem que armazenar a configuração para cada grupo e acontece que ele é chamado de diretório administrativo e escrito na página man; -)

Você encontrará essas informações em /var/lib/dpkg/alternatives (por padrão). A segunda linha em cada um desses arquivos define o link mestre que você está procurando. Você pode extrair assim:

usr@srv $ sed -ne 2p /var/lib/dpkg/alternatives/java
/usr/bin/java

No entanto, essa é apenas uma solução alternativa para quem tem uma versão mais antiga de update-alternatives .

    
por 07.07.2013 / 00:33
3

Simpleton question here: O <link> sempre será o mesmo recuperado por um simples which [program] , já que esse é o link que o sistema usa para chamar um programa por linha de comando?

Por exemplo, rastreando os links para o pycharm eu recebo:

user@computer:~$ which pycharm
/usr/bin/pycharm
user@computer:~$ ll /usr/bin/pycharm
lrwxrwxrwx 1 root root 25 Mar 12  2015 /usr/bin/pycharm -> /etc/alternatives/pycharm*
user@computer:~$ ll /etc/alternatives/pycharm 
lrwxrwxrwx 1 root root 43 Mar 12  2015 /etc/alternatives/pycharm -> /opt/pycharm-community-4.0.5/bin/pycharm.sh*

E eu posso usar:

sudo update-alternatives --install /usr/bin/pycharm pycharm /opt/pycharm-community-4.5.0/bin/pycharm.sh 0

Para minha nova instalação do pycharm.

Então, talvez você possa criar um script para usar a saída de which .

    
por 08.10.2015 / 18:11