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
まず、代入文の周りにスペースを入れてはいけません=
。
第二に、子プロセス(スクリプト)は現在の環境に影響を与えることはできません。
環境変数を設定するスクリプトを実行し、変更が現在の環境に影響するようにするには、(.
ドット)またはsource
inを使用してスクリプトをインポートする必要がありますbash
。
sudo
また、スクリプトからスクリプトを取得できない可能性がありますsudo
(この場合、それを使用する理由はわかりません)。
これは、次のスクリプトファイルを持つことができることを意味します。
LD_LIBRARY_PATH="/opt/mqm/lib64:$LD_LIBRARY_PATH"
その後、次のいずれかの方法を使用して取得できます。
. ./file
または
source ./file
対話型シェルのシェル起動ファイルで変数(~/.bashrc
使用されている場合)を設定してエクスポートし、bash
それを「グローバルに」(シェルで開始されたすべてのプロセスに対して)設定します。