スクリプトで LD_CONFIG_PATH を変更できません。

スクリプトで LD_CONFIG_PATH を変更できません。

blabla.so「見つからない」状況を避けるために、LD_CONFIG_PATHにいくつかのパスを追加するスクリプトを作成しようとしています。問題は、私のスクリプトが(エクスポートを介して)独自のコンテキストを変更できますが、他のシェルには影響しません。再起動とシェルの間に持続するようにグローバルに変数を設定したいと思います。

私の現在のスクリプトは次のとおりです。

LDPATH='/opt/mqm/lib64'
LD_LIBRARY_PATH="$LDPATH:$LD_LIBRARY_PATH"
ldconfig

私は次のように走る

sudo ./set_my_ld_path.sh
$LD_LIBRARY_PATH 

何も返しません(LD_LIBRARY_PATH空)。

私も試しました

LDPATH='/opt/mqm/lib64' env
LD_LIBRARY_PATH="$LDPATH:$LD_LIBRARY_PATH"
ldconfig

ただし、PATH / LANG / HOME / LC_TIME / ...などのすべての既存の変数のみを作成します。

たとえば、powershell で次のスクリプトを実行すると、必要な操作が実行されます。

# setting an environment variable for current and descendant processes, same as bash `export`
$env:OPENCV_DIR = $OPENCV_DIR

# applying it machine-wide, persists between users/shells/reboots
[Environment]::SetEnvironmentVariable("OPENCV_DIR", $env:OPENCV_DIR, [EnvironmentVariableTarget]::Machine)

それはどのように可能ですか?

答え1

まず、代入文の周りにスペースを入れてはいけません=

第二に、子プロセス(スクリプト)は現在の環境に影響を与えることはできません。

環境変数を設定するスクリプトを実行し、変更が現在の環境に影響するようにするには、(.ドット)またはsourceinを使用してスクリプトをインポートする必要がありますbash

sudoまた、スクリプトからスクリプトを取得できない可能性がありますsudo(この場合、それを使用する理由はわかりません)。

これは、次のスクリプトファイルを持つことができることを意味します。

LD_LIBRARY_PATH="/opt/mqm/lib64:$LD_LIBRARY_PATH"

その後、次のいずれかの方法を使用して取得できます。

. ./file

または

source ./file

対話型シェルのシェル起動ファイルで変数(~/.bashrc使用されている場合)を設定してエクスポートし、bashそれを「グローバルに」(シェルで開始されたすべてのプロセスに対して)設定します。

関連情報