अद्यतन-विकल्प का उपयोग करके वैकल्पिक जोड़ने का बेहतर तरीका?


16

मैंने update-alternativesकई बार मैनुअल देखा है, लेकिन मुझे यह पता नहीं चल पाया है कि एक विशिष्ट विकल्प की ओर इशारा करते हुए वर्तमान लिंक को कैसे दिखाया जाए, और एक नया विकल्प जोड़ते समय उस जानकारी की आवश्यकता होती है।

से update-alternativesमैनुअल:

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

मान लें कि मैं जावा रनटाइम संस्करण का एक नया संस्करण जोड़ना चाहता हूं, लेकिन मुझे वर्तमान सिम्लिंक का पता नहीं है जो वैकल्पिक ( <link>पैरामीटर) से लिंक करता है । वर्तमान में मैं क्या कर रहा हूं:

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

यह आदेश आउटपुट करेगा:

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

उत्पादन मैं पुराने लिंक है कि वैकल्पिक की ओर इशारा करते था पता लगाना पढ़ना तो मैं अंत में अधिकार के साथ फिर से अपने आदेश चला सकते हैं, <link>, पैरामीटर को बदलने /tmp/randomStuffके लिए /usr/local/bin/java:

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

यह ठीक काम करता है, लेकिन जैसा कि आप देखते हैं, पैरामीटर के /tmp/randomStuffरूप में कमांड चलाना <link>बहुत अजीब है।

तो, यहां प्रश्न आते हैं: (1) क्या ऐसे कोई update-alternativeतर्क हैं जो वर्तमान लिंक को आउटपुट कर सकते हैं जो एक विशिष्ट विकल्प की ओर इशारा कर रहा है, या (2) एक नया पैरामीटर प्रदान किए बिना एक नया विकल्प स्थापित करने का एक तरीका है, बस चालू रखने <link>?

जवाबों:


13

आपके पहले सवाल का जवाब देने के लिए मैं आपको संकेत देना चाहता हूं --query:

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

इसके साथ सशस्त्र आपको लिंक स्रोत मिलेगा, जैसे मेरे मामले में जावा के लिए:

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

तो, आप देखते हैं कि मेरी श्रृंखला कैसी है /usr/bin/java -> /etc/alternatives/java -> ...

दुर्भाग्य से, मेरे पास आपके दूसरे प्रश्न का उत्तर नहीं है। मैं कुछ समय पहले इसके लिए एक समाधान खोज रहा हूं, लेकिन ऐसा लगता है कि कोई सरल उपाय नहीं है, फिर भी। --queryकॉल के आउटपुट को पार्स करने के लिए आप कुछ हैक लिख सकते हैं , शायद इस तरह:

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

जिसके बाद आप --installकॉल के लिए इनपुट के रूप में उपयोग कर सकते हैं। लेकिन चूंकि यह मेरी राय में काफी गड़बड़ है, इसलिए मैं इसकी सिफारिश नहीं करूंगा। इसके बजाय आप एक नज़र रखना चाहते हो सकता है galternatives, विकल्प प्रणाली के सामने एक छोर। यहां तक ​​कि अगर मुझे इस तरह की बुनियादी नौकरियों के लिए ग्राफिकल सामान का उपयोग करना पसंद नहीं है, तो यह काफी सुविधाजनक है और मैंने कमांड लाइन टूल के बजाय इस टूल का उपयोग करना समाप्त कर दिया है।

संपादित करें

मैं उत्सुक था कि कैसे update-alternativesपता चलता है कि कमांड सिमिलिंक क्या है और स्रोतों में एक संक्षिप्त रूप ले लिया है। बेशक वैकल्पिक प्रणाली में प्रत्येक समूह के लिए कॉन्फ़िगरेशन को संग्रहीत करना पड़ता है और यह पता चलता है कि इसे प्रशासनिक निर्देशिका कहा जाता है और आदमी पर लिखा है ;-);

आपको यह जानकारी /var/lib/dpkg/alternatives(डिफ़ॉल्ट रूप से) मिलेगी । इन फ़ाइलों में से प्रत्येक में दूसरी पंक्ति उस मास्टर लिंक को परिभाषित करती है जिसे आप खोज रहे हैं। आप इसे इस तरह से निकाल सकते हैं:

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

हालाँकि, यह पुराने संस्करण वाले लोगों के लिए केवल एक समाधान है update-alternatives


उत्तर देने के लिए धन्यवाद, लेकिन अपडेट-विकल्प के संस्करण जो मैं चला रहा हूं (1.16.1.2) न ही --query या --display का उपयोग करके लिंक जानकारी नहीं दिखाता है। आप कौन सा संस्करण उपयोग कर रहे हैं? 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
पगलीका

मैंने 1.16.10स्थापित किया है। क्या आप अपना संस्करण अपडेट नहीं कर सकते?
बीनफ़ाल्से जूल

आप आदमी हो! दोनों समाधान उत्कृष्ट हैं!
पगलीका

6

सिंपलटन प्रश्न यहां: क्या <link>हमेशा से एक ही एक सरल द्वारा प्राप्त नहीं किया जा सकता है which [program]क्योंकि यह वह लिंक है जिसे सिस्टम कमांड-लाइन द्वारा प्रोग्राम को कॉल करने के लिए उपयोग करता है?

उदाहरण के लिए, मुझे मिले pycharm के लिंक वापस ट्रेस करने में:

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*

और मैं तब उपयोग कर सकता हूं:

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

मेरे नए pycharm के लिए स्थापित करें।

तब शायद आप आउटपुट का उपयोग करने के लिए स्क्रिप्ट का निर्माण कर सकते थे which


टिप के लिए धन्यवाद, लेकिन ऐसे समय होते हैं जब यह मददगार नहीं होगा। मैं update-alternativesफ़ायरफ़ॉक्स के लिए जावा और फ्लैश प्लगइन्स का ट्रैक रखने के लिए भी उपयोग करता हूं , और मैं हमेशा उन पथ "/ usr / lib / mozilla / plugins" को भूल जाता हूं जहां मुझे उन प्लगइन्स को रखना चाहिए। मैं बाहर कि पथ का उपयोग नहीं मिल रहा है whichया whereisया किसी आदेश है कि मेरे मन में आता है, जबकि @binfalse से जवाब सही ढंग से जब मैं चलाने मेरी मशीन पर उस पथ देता है update-alternatives --query java-plugin
पग्लियुका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.