PKG_CONFIG_PATHをCentOSに設定しようとしています。以下は私が試しているコードです。
export |grep PKG_CONFIG_PATH
出力できません。
echo "$PKG_CONFIG_PATH"
:/usr/local/lib/pkgconfig
ここに出力があるのはなぜですか? ?
もし私が
sudo sh -c "echo 'export PKG_CONFIG_PATH=$PKG_CONFIG_PATH :/usr/local/lib/pkgconfig' >> /etc/profile.d/path.sh
source /etc/profile.d/path.sh
これで同じパスが2回表示されます。
export |grep PKG_CONFIG_PATH
declare -x PKG_CONFIG_PATH=:/usr/local/lib/pkgconfig:/usr/local/lib/pkgconfig
それでは、パスがまだ設定されていない場合、$PKG_CONFIG_PATHはどこから来るのでしょうか?
更新された編集: 再起動後に変数が消去されるため、質問の最初の部分は実際には重要ではありません。
本当の問題は、profile.dのファイルが/etc/bashrcによって2回呼び出され、/etc/profileによって1回呼び出されるためだと思います。 WTHに聞くことができますか?なぜこれが起こるのですか?ワーム?誤式?
ベストアンサー1
それは違いです。出口そして非輸出環境変数
このexport
コマンドはリストのみをリストします。エクスポートした環境変数export
つまり、シェルが親プロセスから継承したか、またはコマンドdeclare -x
を使用してエクスポート可能としてマークしたため、子プロセスから継承可能とマークされた変数です。
エクスポートされていない変数はスクリプト内で使用できますが、子プロセスの環境を妨げないため、スクリプトに役立ちます。
エクスポートされない変数を設定するには、name=value
次の構文のみを使用します。
$ FOO=bar
$ echo $FOO
bar
export | grep FOO
$
後で変数をエクスポート可能としてマークできます。
...
$ export FOO
$ export | grep FOO
declare -x FOO="bar"
実際に古典的なBourneシェル必須2段階のプロセスで環境変数を初期化できます。まず、値を設定してからエクスポート可能としてマークします。したがって、最大の移植性のために設計されたシェルスクリプトでは、この構文を引き続き表示できます。
FOO=bar
export FOO
最新のシェルを使用すると、これを1つの手順で実行できます。
$ export FOO=bar
したがって、あなたの場合は、以前にPKG_CONFIG_PATH=:/usr/local/lib/pkgconfig
手動で行ったか、源泉スクリプトまたはログインスクリプトの一部として。