Linux

無法從腳本修改 LD_CONFIG_PATH

  • May 11, 2018

我正在嘗試編寫一個腳本,為 LD_CONFIG_PATH 添加一些路徑,以免“blabla.so找不到”。問題是我的腳本能夠修改自己的上下文(通過導出),但它不會影響其他 shell。我想全域設置 a 變數,以便它在重新啟動和 shell 之間持續存在。

我目前的腳本如下所示:

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)

怎麼可能做到?

首先,作業不能在=.

其次,您永遠不能從子程序(腳本)影響目前環境。

要執行設置環境變數的腳本並讓該更改影響目前環境,您需要使用.(dot) 或sourcein獲取腳本的原始碼bash

您也可能不會通過腳本獲取腳本sudo(在這種情況下,您根本不清楚為什麼要使用sudo)。

這意味著您可以擁有這樣的腳本文件:

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

然後您可以使用

. ./file

或者

source ./file

在您的 shell 啟動文件中為互動式 shell(~/.bashrc如果使用bash)設置(和導出)變數,將“全域”設置它(對於從 shell 啟動的所有程序)。

引用自:https://unix.stackexchange.com/questions/443177