无法从脚本修改 LD_CONFIG_PATH

无法从脚本修改 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)

怎么可能呢?

答案1

首先,赋值语句周围不能有空格=

其次,您永远不能从子进程(脚本)影响当前环境。

要运行设置环境变量的脚本并使该更改影响当前环境,您需要使用.(点) 或sourcein 来获取脚本bash

sudo您也可能不通过(目前还不清楚您sudo在这种情况下使用的原因)来获取脚本。

这意味着您可以拥有如下脚本文件:

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

然后您可以使用以下任一方法获取

. ./file

或者

source ./file

在交互式 shell 的 shell 启动文件中设置(并导出)变量(~/.bashrc如果使用bash),将“全局”设置它(对于从 shell 启动的所有进程)。

相关内容