[unix] 업데이트 대안을 사용하여 대안을 추가하는 더 좋은 방법?

매뉴얼을 update-alternatives여러 번 찾아 보았지만 특정 대안을 가리키는 현재 링크를 표시하는 방법을 찾을 수 없으며 새로운 대안을 추가 할 때 해당 정보가 필요합니다.

로부터 update-alternatives수동 :

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

Java Runtime Edition의 새 버전을 추가하려고하는데 대체 ( <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>?



답변

첫 번째 질문에 대답하기 위해 다음과 같이 힌트를 드리겠습니다 --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대안 시스템의 프런트 엔드 인을 살펴볼 수 있습니다 . 이러한 기본 작업에 그래픽을 사용하고 싶지 않더라도 매우 편리하며 명령 줄 도구 대신이 도구를 사용하게되었습니다.

편집하다

update-alternativessymlink 명령이 무엇인지 알고 궁금한 점이 있으며 소스를 간단히 살펴 보았습니다. 물론 대안 시스템은 각 그룹에 대한 구성을 저장해야하며 관리 디렉토리 라고 하며 매뉴얼 페이지에 쓰여져 있습니다. 😉

이 정보는 /var/lib/dpkg/alternatives기본적으로 제공됩니다. 각 파일의 두 번째 줄 은 찾고 있는 마스터 링크 를 정의합니다 . 다음과 같이 추출 할 수 있습니다.

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

그러나 이는 이전 버전의 사용자에게 해결 방법 일뿐입니다 update-alternatives.


답변

Simpleton question here : 시스템이 명령 줄로 프로그램을 호출하는 데 사용하는 링크이기 때문에 <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있습니다.


답변