ドキュメントを何度も見ましたが、特定の選択肢update-alternatives
への現在のリンクを表示する方法が見つからず、新しい選択肢を追加するときにその情報が必要です。
update-alternatives
マニュアルから:
--install <link> <name> <path> <priority>
<link>
Java Runtime Editionの新しいバージョンを追加したいのですが、代替(パラメータ)への現在のシンボリックリンクがわからないとしましょう。私が現在していることは:
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>
?
答え1
あなたの最初の質問に答えるためにあなたに尋ねたいと思います。--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 -> ...
。
残念ながら、2番目の質問には回答できません。しばらく解決策を探していましたが、まだ簡単な解決策はないようです。あなたができることは、--query
呼び出しの出力を解析するいくつかのハッキングを書くことです。おそらく:
update-alternatives --query java | /bin/grep Link | cut -f 2 -d " "
--install
その後、それを呼び出しへの入力として使用できます。ただし、この方法は多少混乱する可能性があるため、お勧めできません。代わりに、以下を見てください。galternatives
、交換システムのフロントエンド。このような基本的な作業にグラフィックツールを使うのが好きではないのにとても便利なので、コマンドラインツールの代わりにこのツールを使うようになりました。
編集する
コマンドシンボリックリンクとは何か疑問に思ったので、update-alternatives
ソースコードを簡単に見ました。もちろん、交換システムは各グループの構成を保存する必要があります。管理ディレクトリマンページに記録されています;-)
この情報はデフォルトで表示されます/var/lib/dpkg/alternatives
。各ファイルの 2 行目は次を定義します。メインリンクあなたが探しているもの。次のように抽出できます。
usr@srv $ sed -ne 2p /var/lib/dpkg/alternatives/java
/usr/bin/java
ただし、これは以前のバージョンを使用しているユーザーにのみ当てはまりますupdate-alternatives
。
答え2
Simpletonここでの質問:Simpleは、システムがコマンドラインを介してプログラムを呼び出すために使用するリンクなので、<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
。
答え3
--installを使用すると、既存のすべての代替案を再提供する必要はありません。以下の例をご覧ください。https://wiki.debian.org/DebianAlternatives。ここでは、x-terminal-emulatorの代わりに/usr/local/bin/alacrttyを追加して選択します。
[schwarzgerat](0) $ sudo update-alternatives --install /usr/bin/x-terminal-emualtor x-terminal-emulator /usr/local/bin/alacritty 10
update-alternatives: renaming x-terminal-emulator link from /usr/bin/x-terminal-emulator to /usr/bin/x-terminal-emualtor
[schwarzgerat](0) $ sudo update-alternatives --config x-terminal-emulator
There are 16 choices for the alternative x-terminal-emulator (providing /usr/bin/x-terminal-emualtor).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/terminator 50 auto mode
1 /usr/bin/gnome-terminal.wrapper 40 manual mode
* 2 /usr/bin/kitty 20 manual mode
3 /usr/bin/koi8rxterm 20 manual mode
4 /usr/bin/konsole 40 manual mode
5 /usr/bin/lxterm 30 manual mode
6 /usr/bin/mlterm 20 manual mode
7 /usr/bin/pangoterm 15 manual mode
8 /usr/bin/st 15 manual mode
9 /usr/bin/terminator 50 manual mode
10 /usr/bin/terminology 40 manual mode
11 /usr/bin/terminus 20 manual mode
12 /usr/bin/urxvt 20 manual mode
13 /usr/bin/uxterm 20 manual mode
14 /usr/bin/xfce4-terminal.wrapper 40 manual mode
15 /usr/bin/xterm 20 manual mode
16 /usr/local/bin/alacritty 10 manual mode
Press <enter> to keep the current choice[*], or type selection number: 16
update-alternatives: using /usr/local/bin/alacritty to provide /usr/bin/x-terminal-emualtor (x-terminal-emulator) in manual mode
[schwarzgerat](0) $