Lepszy sposób na dodanie alternatywy za pomocą aktualizacji-alternatyw?


16

update-alternativesKilkakrotnie przeglądałem instrukcję, ale nie mogę dowiedzieć się, jak pokazać bieżący link wskazujący na konkretną alternatywę, a ta informacja jest potrzebna przy dodawaniu nowej alternatywy.

Z update-alternativesinstrukcji:

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

Powiedzmy, że chcę dodać nową wersję Java Runtime Edition, ale nie znam bieżącego dowiązania symbolicznego, które prowadzi do alternatywy ( <link>parametru). Obecnie robię to:

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

To polecenie wyświetli:

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

Czytając dane wyjściowe, znajduję stary link wskazujący na alternatywę, dzięki czemu mogę w końcu ponownie uruchomić polecenie z odpowiednim <link>parametrem, zmieniając /tmp/randomStuffna /usr/local/bin/java:

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

Że działa dobrze, ale jak widać, uruchamiając komendę /tmp/randomStuffjako <link>parametr jest bardzo niewygodne.

Oto pytania: (1) Czy istnieją update-alternativeargumenty, które mogą wyprowadzić bieżący link wskazujący na konkretną alternatywę, lub (2) czy istnieje sposób na zainstalowanie nowej alternatywy bez konieczności podawania nowego parametru, po prostu utrzymanie prądu <link>?

Odpowiedzi:


13

Aby odpowiedzieć na twoje pierwsze pytanie, chciałbym ci podpowiedzieć --query:

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

Uzbrojony w to otrzymasz źródło linku, np. W moim przypadku dla java:

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

Widzisz więc, jak mój łańcuch idzie /usr/bin/java -> /etc/alternatives/java -> ....

Niestety nie mam odpowiedzi na twoje drugie pytanie. Jakiś czas temu szukałem rozwiązania tego problemu, ale wydaje się, że nie ma jeszcze prostego obejścia tego problemu. Co możesz zrobić, to napisać jakiś hack, aby przeanalizować wynik --querypołączenia, może tak:

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

które można następnie wykorzystać jako dane wejściowe dla --installpołączenia. Ale ponieważ moim zdaniem jest to dość niechlujne, nie polecam tego. Zamiast tego możesz rzucić okiem na galternativesfront-end do systemu alternatyw. Nawet jeśli nie lubię używać graficznych elementów do takich podstawowych zadań, jest to dość wygodne i skończyło się na tym narzędziu zamiast narzędzi wiersza poleceń.

EDYTOWAĆ

Byłem ciekawy, skąd update-alternativeswie, jakie jest dowiązanie symboliczne polecenia i rzuciłem okiem na źródła. Oczywiście system alternatyw musi przechowywać konfigurację dla każdej grupy i okazuje się, że nazywa się to katalogiem administracyjnym i jest zapisany na stronie podręcznika ;-)

Informacje te znajdziesz w /var/lib/dpkg/alternatives(domyślnie). Drugi wiersz w każdym z tych plików określa poszukiwany link główny . Możesz to wyodrębnić w następujący sposób:

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

Jest to jednak tylko obejście dla osób posiadających starszą wersję update-alternatives.


Dzięki za odpowiedź, ale wersja aktualizacji-alternatywy, którą używam (1.16.1.2), nie wyświetla informacji o łączach, nie używając ani --query, ani --display. Jakiej wersji używasz? 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

Mam 1.16.10zainstalowany. Nie możesz zaktualizować swojej wersji?
binfalse

Jesteś meżczyzną! Oba rozwiązania są doskonałe!
pagliuca

6

Proste pytanie tutaj: czy nie <link>zawsze będzie to samo, co proste, which [program]ponieważ jest to łącze, którego system używa do wywoływania programu z wiersza poleceń?

Na przykład, śledząc linki do pycharm, otrzymuję:

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*

I mogę wtedy użyć:

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

Do mojej nowej instalacji pycharm.

Wtedy może uda ci się zbudować skrypt, który będzie wykorzystywał dane wyjściowe which.


Dzięki za wskazówkę, ale są chwile, w których nie będzie to pomocne. Używam update-alternativesrównież do śledzenia wtyczek Java i Flash dla Firefoxa i zawsze zapominam o ścieżce „/ usr / lib / mozilla / plugins”, gdzie powinienem umieścić te wtyczki. Nie mogę znaleźć tej ścieżki za pomocą whichlub whereiskomendy, która przychodzi mi do głowy, podczas gdy odpowiedź z @binfalse poprawnie zwraca tę ścieżkę na moim komputerze po uruchomieniu update-alternatives --query java-plugin.
pagliuca 8.03.16
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.