エクスポートPATH CentOSを使用した奇妙な動作

エクスポートPATH CentOSを使用した奇妙な動作

PATH次の場所にある2つの異なるスクリプトで変数を変更しようとしています。/etc/profile.d/

  • /etc/profile.d/php.sh

    #!/bin/sh
    PATH=$PATH:/usr/local/php/bin
    export PATH
    
  • /etc/profile.d/mysql.sh

    #!/bin/sh
    PATH=$PATH:/usr/local/mysql/bin
    export PATH
    

CentOSを再起動してPATH変数(編集済み)を確認しましたが、$ PATHが2回修正されました!

[]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:
/usr/local/mysql/bin:/usr/local/php/bin:/home/IntUser/bin:/usr/local/mysql/bin:
/usr/local/php/bin
[]$ 

ルートモードで:

[]$ su
Password: 
[]# 

$ PATHが3回修正されました!

[]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:
/usr/local/mysql/bin:/usr/local/php/bin:/home/IntUser/bin:/usr/local/mysql/bin:
/usr/local/php/bin:/usr/local//mysql/bin:/usr/local/php/bin
[]# 

一度だけ割り当てたらどうでしょうか?

答え1

問題を解決する方法は次のとおりです。/etc/profile.d/php.shファイルの内容を次のように置き換えます。

pathmunge /usr/local/php/bin after

ファイルも同じです/etc/profile.d/mysql.sh

pathmunge /usr/local/mysql/bin after

説明は/etc/profile.d/*.shのファイルです源泉/etc/profile(bashシェルにログインして得たもの)。

これらのファイルはソースとして提供されるため、/etc/profileファイル内のすべての変数と関数を使用できます。これは、まだ存在していないpathmungeディレクトリに新しいディレクトリを追加することが唯一の目的である(私のFedora 20の)機能です。PATHこのキーワード afterPATH

これにより重複は発生しません。しかし、なぜあなたがそれを持っているのかわかりません。

答え2

これは、構成内の項目が/etc/profile複数回ロードされるために発生します。見つけて修正する必要があります。

このファイルは/etc/profileログインシェルから読み込まれます。また、多くのプラットフォームでグラフィカルセッションにログインすると読み込まれます(ただし、ディスプレイマネージャ、セッションマネージャ、およびディストリビューションの設定方法によって異なります)。

/etc/profile1つの考えられる問題は、別の場所(たとえば)からデータを要求していることです~/.bashrc。この場合は削除してください。実行してgrep -s profile ~/.*潜在的な犯人を確認します。su読み取りの実行後に/etc/profile問題のインスタンスが1つ以上ある必要があり、関連する可能性があります.bashrc

別の考えられる問題は、GUIセッションで端末を開く間にログインシェルを実行することです。解決策はログインシェルを実行することではありません。すでにGUIセッションにログインしており、端末は一般的なアプリケーションです。

/home/IntUser/bin以前に一度表示され、その後に別のディレクトリがあるので/etc/profile/home/IntUser/bin

または、設定を変更したくない場合は、ディレクトリがまだ存在しない場合にのみPATHにディレクトリを追加するだけです。

case :$PATH: in
  *:/usr/local/php/bin:*) :;;
  *) PATH=$PATH:/usr/local/php/bin;;
esac

関連情報