update-alternatives
のマニュアルを何回か調べましたが、特定の代替案を指す現在のリンクを表示する方法がわかりません。その情報は、新しい代替案を追加するときに必要です。
update-alternatives
マニュアルから:
--install <link> <name> <path> <priority>
Javaランタイムエディションの新しいバージョンを追加したいが、代替(<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 -> ...
のようになります。
残念ながら、2つ目の質問に対する回答はありません。しばらく前にこれに対する解決策を探していましたが、まだ簡単な回避策はまだないようです。あなたができることは、おそらく次のように、--query
呼び出しの出力を解析するためのハックを書くことです:
update-alternatives --query Java | /bin/grep Link | cut -f 2 -d " "
これを--install
呼び出しの入力として使用できます。しかし、これは私の見解ではかなり厄介なので、私はそれをお勧めしません。代わりに、代替システムのフロントエンドである galternatives
を確認することをお勧めします。このような基本的なジョブにグラフィカルなものを使用したくない場合でも、それは非常に便利で、コマンドラインツールの代わりにこのツールを使用することになりました。
[〜#〜]編集[〜#〜]
私はupdate-alternatives
がコマンドシンボリックリンクが何であるかを知る方法に興味があり、ソースを簡単に調べました。もちろん、Alternativesシステムは各グループの設定を保存する必要があり、administrative directoryと呼ばれ、manページに記述されていることがわかります;-)
この情報は/var/lib/dpkg/alternatives
(デフォルト)にあります。これらの各ファイルの2行目は、探しているマスターリンクを定義しています。次のように抽出できます:
usr@srv $ sed -ne 2p /var/lib/dpkg/alternatives/Java
/usr/bin/Java
ただし、これはupdate-alternatives
の古いバージョンを使用している場合の回避策にすぎません。
ここでシンプトンの質問:<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
の出力を使用するスクリプトを作成できます。