2

/ etc / bashrc(Fedora上)に次のようなエントリを追加しました。

#=========== Maven Related variables
export JAVA_HOME='/usr/java/default'
export PATH=${JAVA_HOME}:$PATH


#=========== Maven Related variables
export M2_HOME=/usr/local/apache-maven/apache-maven-3.0.4
export PATH=${M2_HOME}/bin:$PATH

#=========== Ant Related variables
export ANT_HOME=/usr/local/apache-ant
export Path=${ANT_HOME}/bin:$PATH

これで、bashコマンドを実行して環境変数を更新するたびに、これらすべての追加が繰り返され、PATHはそれ自体を再帰的に追加し続けます。数十回bashを実行し続けると、$PATHは100行の繰り返しコンテンツになります。私は何が間違っているのですか?

ログインするユーザーに関係なく、これらの値をPATHに入れたいので、これらのエントリを/ etc/bashrcに追加したことに注意してください。

ありがとう、シャノン

4

4 に答える 4

5

PATHを段階的に設定しないでください.bashrc。一度セットして、.profileその後はそのままにしておきます。または、あなたが言及/etc/bashrcしているので、PATHを段階的に設定しないでください/etc/bashrc。一度セットして/etc/profileそのままにしておきます。

1つの副次的メリット。物事は少し速く動作します。

繰り返しのPATHをクリーンアップするコードについては、シェルスクリプトのPATH要素を操作する方法のコードも参照してください。

于 2012-12-12T00:10:13.580 に答える
2

このステートメントによる場合:

... bashコマンドを実行して、環境変数を更新します...

コマンドを入力していることを意味します

bash

コマンドプロンプトでは、「環境変数を更新」していません。現在のシェルの新しいサブシェルを起動しています。新しいシェルは元のシェルのパスを継承し、そこにもう一度追加します。これを行うたびに、PATHが長くなります。

于 2012-12-12T00:10:39.390 に答える
0

次のようなものを使用できます。

PATH=$(echo "$PATH" | awk -v RS=: -v ORS=: '!(a[$0]++)' | sed 's/:$//')

パスを変更した後、パスをクリーンアップします。また、パスをスキャンするときに最初の一致が使用されるため、重複することは実際には重要ではありません。

于 2012-12-12T00:13:07.187 に答える
0

私も同じ問題に直面していました(CentOS)。これが私がそれを修正した方法です。

  1. ユーザーの.profileに次の行を追加しました

    export PATH = / usr / local / apache-maven-3.3.3 / bin:$ PATH

    エクスポートJAVA_HOME=/ usr

    SHELL = / bin/bashをエクスポートします

    #bashを実行する(kshが私のデフォルトシェルだったため)

    / bin / bash

  2. ユーザーの.bashrcファイルに変更はありません

  3. / etc/profileへの変更はありません
  4. / etc/bashrcへの変更はありません
于 2017-05-11T15:01:09.737 に答える