重複したプログラム名の処理 bash

重複したプログラム名の処理 bash

知りたいです。$PATH 従属記入。皆さんは信仰の跳躍に私と一緒にいなければなりません。しかし、ここにあります。

Java実行可能ファイルがありますが、/usr/bin/javaこのバージョンは非常に古く古いものであるとします。残念ながら、私たちはアクセス権がないためsu交換できません。ただし、現在のバージョンのJRE / JDKをローカルにダウンロードし、最新バージョンを指すことができます。私の質問は、名前が同じですが、複数の実行可能ファイルがある状況をbashがどのように処理するかです。その他場所? bashは、私たちがコンソールに何かを入力したときにjava何を実行するかどうかを選択しますか?/usr/bin他の実行ファイルがたくさん必要だと仮定すると、$PATHこのような実行ファイルをどのように見つけることができますか?

理想的には、入力するときは次のことを確認java -versionする必要があります。

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

変える

java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) Client VM(build 24.45-b08, mixed mode, sharing)

私はこの質問が以前に要求されたことがあり、それに関連する専門用語があると確信しています。 SE、SO、およびいくつかのフォーラムを閲覧しましたが、決定的なコンテンツが見つかりませんでした。

ベストアンサー1

検索$PATHは順番に行われます。たとえば、echo $PATHshowの場合/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin、各ディレクトリは特定のコマンドに対して順次検索されます(コマンドがエイリアスまたは組み込みシェルではないと仮定)。

ユーザーごとに特定のバイナリをオーバーライドしたい場合(または自分以外に他のユーザーをオーバーライドする権限がない場合)、binホームディレクトリにディレクトリを作成し、プレフィックスこのディレクトリの PATH 変数です。

このように:

$ cd ~
$ pwd
/home/joe
$ mkdir bin
$ echo "$PATH"
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
$ echo 'export PATH="$HOME/bin:$PATH"' >> .bash_profile

その後、source .bash_profile新しいPATH定義が適用されます(ログアウトしてログインするか、ターミナルエミュレータを再起動します)。

$ source .bash_profile
$ echo "$PATH"
/home/joe/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

これで、挿入したすべての実行可能ファイルが/home/joe/bin/システムバイナリと実行可能ファイルよりも優先されます。


あなたがするシステムアクセスとオーバーライドがすべてのユーザーに対して機能する必要がある場合は、オーバーライド実行可能ファイルを配置するのに好ましい場所が/usr/local/binこの目的に使用されます。実は/usr/local/binそんな時が多い。すでに最初のディレクトリでは$PATHこれを具体的に許可します。

おすすめ記事