วิธีที่ดีกว่าในการเพิ่มทางเลือกโดยใช้ทางเลือกอัพเดท?


16

ฉันค้นหาคู่มือมาแล้วupdate-alternativesหลายครั้ง แต่ฉันไม่สามารถหาวิธีแสดงลิงค์ปัจจุบันที่ชี้ไปยังทางเลือกเฉพาะและข้อมูลนั้นจำเป็นเมื่อทำการเพิ่มทางเลือกใหม่

จากupdate-alternativesคู่มือ:

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

สมมติว่าฉันต้องการเพิ่ม Java Runtime Edition เวอร์ชันใหม่ แต่ฉันไม่ทราบว่า symlink ปัจจุบันที่เชื่อมโยงไปยังทางเลือกอื่น ( <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).

ด้วยสิ่งนี้คุณจะได้แหล่งลิงก์เช่นในกรณีของฉันสำหรับ java:

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, front-end ของระบบทางเลือก แม้ว่าฉันไม่ชอบที่จะใช้สิ่งกราฟิกสำหรับงานพื้นฐานเช่นนั้นมันค่อนข้างสะดวกและฉันก็ลงเอยด้วยการใช้เครื่องมือนี้แทนเครื่องมือบรรทัดคำสั่ง

แก้ไข

ฉันอยากรู้ว่าupdate-alternativesรู้ว่าคำสั่ง symlink นั้นคืออะไรและดูแหล่งข้อมูลสั้น ๆ แน่นอนว่าระบบทางเลือกจะต้องจัดเก็บการกำหนดค่าสำหรับแต่ละกลุ่มและปรากฎว่ามันเรียกว่าไดเรกทอรีผู้ดูแลระบบและเขียนไว้ใน man page ;-)

คุณจะพบข้อมูลนี้ใน/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
pagliuca

ฉัน1.16.10ติดตั้งแล้ว คุณไม่สามารถอัปเดตเวอร์ชันของคุณหรือ
binfalse

คุณเป็นผู้ชาย! โซลูชั่นทั้งสองนั้นยอดเยี่ยมมาก!
pagliuca

6

คำถาม Simpleton ที่นี่: จะไม่<link>เหมือนเดิมที่ดึงโดยง่าย ๆwhich [program]เพราะนั่นคือลิงค์ที่ระบบใช้เรียกโปรแกรมโดย command-line?

ตัวอย่างเช่นการติดตามลิงก์ย้อนกลับสำหรับ 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เพื่อติดตามจาวาและปลั๊กอินแฟลชสำหรับ firefox และฉันมักจะลืมเส้นทาง "/ usr / lib / mozilla / ปลั๊กอิน" ที่ฉันควรใส่ปลั๊กอินเหล่านั้น ฉันไม่สามารถหาเส้นทางที่ใช้whichหรือwhereisหรือคำสั่งใด ๆ ที่อยู่ในใจของฉันในขณะที่คำตอบจาก @binfalse update-alternatives --query java-pluginได้อย่างถูกต้องส่งกลับเส้นทางที่อยู่ในเครื่องของฉันเมื่อฉันทำงาน
pagliuca
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.