更新の代替手段を使用して代替を追加するより良い方法は何ですか?

更新の代替手段を使用して代替を追加するより良い方法は何ですか?

ドキュメントを何度も見ましたが、特定の選択肢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

おすすめ記事