知りたいです。$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 $PATH
showの場合/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
これを具体的に許可します。
答え2
Bash(実際にはすべてのシェル)が実行されます。最初指定された名前の実行可能ファイルを指定された順序で検索して検索します。$パス環境で。
または単純に:$ PATHの順序で見つかった最初の実行可能ファイルです。