我正在尝试编写一个脚本,向 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)
怎么可能呢?
答案1
首先,赋值语句周围不能有空格=
。
其次,您永远不能从子进程(脚本)影响当前环境。
要运行设置环境变量的脚本并使该更改影响当前环境,您需要使用.
(点) 或source
in 来获取脚本bash
。
sudo
您也可能不通过(目前还不清楚您sudo
在这种情况下使用的原因)来获取脚本。
这意味着您可以拥有如下脚本文件:
LD_LIBRARY_PATH="/opt/mqm/lib64:$LD_LIBRARY_PATH"
然后您可以使用以下任一方法获取
. ./file
或者
source ./file
在交互式 shell 的 shell 启动文件中设置(并导出)变量(~/.bashrc
如果使用bash
),将“全局”设置它(对于从 shell 启动的所有进程)。