Linux
無法從腳本修改 LD_CONFIG_PATH
我正在嘗試編寫一個腳本,為 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) 或source
in獲取腳本的原始碼bash
。您也可能不會通過腳本獲取腳本
sudo
(在這種情況下,您根本不清楚為什麼要使用sudo
)。這意味著您可以擁有這樣的腳本文件:
LD_LIBRARY_PATH="/opt/mqm/lib64:$LD_LIBRARY_PATH"
然後您可以使用
. ./file
或者
source ./file
在您的 shell 啟動文件中為互動式 shell(
~/.bashrc
如果使用bash
)設置(和導出)變數,將“全域”設置它(對於從 shell 啟動的所有程序)。