Güncelleme alternatiflerini kullanarak alternatif eklemenin daha iyi bir yolu var mı?


16

update-alternativesBirkaç kez el kitabını aradım, ancak mevcut bağlantıyı belirli bir alternatifi gösteren nasıl göstereceğimizi bulamıyorum ve yeni bir alternatif eklerken bu bilgiye ihtiyaç var.

Gönderen update-alternativesmanuel:

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

Diyelim ki Java Runtime Edition'ın yeni bir sürümünü eklemek istiyorum, ancak alternatif ( <link>parametreye) bağlanan geçerli symlink'i bilmiyorum . Şu anda ne yapıyorum:

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

Bu komutun çıktısı:

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

Sonunda doğru olan yine benim komutunu çalıştırabilirsiniz bu yüzden, ben alternatif işaret edildi eski bağlantısına öğrenmek çıkışını Okuma <link>parametresi değişen /tmp/randomStuffiçin /usr/local/bin/java:

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

Bu iyi çalışıyor, ancak gördüğünüz gibi, komutu parametre /tmp/randomStuffolarak çalıştırmak <link>çok garip.

Yani, sorular geliyor: (1) update-alternativeBelirli bir alternatifi işaret eden mevcut bağlantıyı çıkaran herhangi bir argüman var mı , ya da (2) yeni bir parametre sağlamak zorunda kalmadan yeni bir alternatif kurmanın bir yolu var mı? akım tutmak <link>?

Yanıtlar:


13

İlk sorunuzu cevaplamak için size ipucu vermek istiyorum --query:

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

Bununla silahlı bağlantı kaynağı alacaksınız, örneğin benim durumumda java için:

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

Görüyorsun, zincirim böyle gidiyor /usr/bin/java -> /etc/alternatives/java -> ....

Ne yazık ki, ikinci sorunuza bir cevabım yok. Bir süre önce bunun için bir çözüm arıyordum, ancak henüz basit bir çözüm yok gibi görünüyor. Yapabileceğiniz şey, --queryçağrının çıktısını ayrıştırmak için bazı hack yazmaktır , belki şu şekilde:

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

daha sonra --installçağrı için giriş olarak kullanabilirsiniz . Ama bu bence oldukça dağınık olduğu için tavsiye etmem. Bunun yerine galternativesalternatif sisteme bir ön uç olarak bakmak isteyebilirsiniz . Bu tür temel işler için grafiksel şeyler kullanmak istemesem bile oldukça kullanışlı ve komut satırı araçları yerine bu aracı kullandım.

DÜZENLE

update-alternativesSymlink komutunun ne olduğunu nereden bildiğini merak ettim ve kaynaklara kısa bir göz attım. Tabii ki alternatifler sistemi her grup için yapılandırmayı saklamak zorunda ve yönetici dizini denir ve man sayfasında ;-) yazdığı ortaya çıkar.

Bu bilgileri /var/lib/dpkg/alternatives(varsayılan olarak) bölümünde bulabilirsiniz . Bu dosyaların her birindeki ikinci satır, aradığınız ana bağlantıyı tanımlar . Bu şekilde çıkarabilirsiniz:

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

Ancak, bu yalnızca eski bir sürümüne sahip olanlar için bir çözümdür update-alternatives.


Yanıtladığınız için teşekkür ederiz, ancak çalıştırdığım güncelleme alternatiflerinin sürümü (1.16.1.2), --query veya --display komutlarını kullanarak bağlantı bilgilerini göstermez. Hangi sürümü kullanıyorsunuz? sudo update-alternatives --query java Link: java Status: auto Best: /usr/local/java/jre1.6.0_45/bin/java Value: /usr/local/java/jre1.6.0_45/bin/java Alternative: /usr/local/java/jre1.6.0_45/bin/java Priority: 0
pagliuca

Ben ettik 1.16.10yüklü. Sürümünüzü güncelleyemiyor musunuz?
binfalse

Adamsın! Her iki çözüm de mükemmel!
pagliuca

6

Simpleton sorusu burada: Sistemin bir programı komut satırı ile çağırmak için kullandığı bağlantı bu olduğundan , <link>her zaman basit bir yöntemle alınan aynı olmayacak which [program]mı?

Örneğin, pycharm için bağlantıları izleme:

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*

Ve sonra kullanabilirim:

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

Yeni pycharm kurulumum için.

Sonra belki çıktısını kullanmak için bir komut dosyası oluşturabilirsiniz which.


Bahşiş için teşekkürler, ama bunun yardımcı olmayacağı zamanlar vardır. update-alternativesFirefox için java ve flash eklentilerini takip etmek için de kullanıyorum ve her zaman bu eklentileri koymam gereken "/ usr / lib / mozilla / plugins" yolunu unutuyorum. Bu yolu whichveya whereisaklıma gelen herhangi bir komutu kullanarak bulamıyorum , oysa @binfalse'ın cevabı çalıştırdığımda makinemdeki doğru yolu döndürüyor update-alternatives --query java-plugin.
pagliuca
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.