gpt4 book ai didi

c++ - 显示环境变量 LD_LIBRARY_PATH

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:10 26 4
gpt4 key购买 nike

我有一个打印环境变量的简单控制台应用程序:

int main(int argc, char **argv, char **envp)
{

printf("Scanning for LD_LIB_PATH\n");
for (char **env = envp; *env != 0; env++)
{
char *thisEnv = *env;
std::string s= *env;
if (s.find("LD_LIBRARY_PATH")!=std::string::npos)
{
printf("!!!!!!! %s\n", thisEnv);
}

printf("%s\n", thisEnv);
}

}

在运行可执行文件之前,我运行设置 LD_LIBRARY_PATH 的脚本

export LD_LIBRARY_PATH=~/aaa/bbb/Debug:~/ccc/ddd/Debug
echo "searching:"
export | grep LD_LIBRARY
echo "done"

脚本运行良好,输出:

exporting
searching:
declare -x LD_LIBRARY_PATH="/home/vicp/aaa/bbb/Debug:/home/vico/ccc/ddd/Debug"
done

我运行可执行文件,它发现许多变量但没有环境变量 LD_LIB_PATH。为什么?

更新

按照建议,我编写了 脚本。 ./script.sh然后用命令仔细检查:

export |grep LD_LIBRARY_PATH

得到输出:

declare -x LD_LIBRARY_PATH="/home/vicp/aaa/bbb/Debug:/home/vico/ccc/ddd/Debug"

但在我的程序中仍然看不到 LD_LIBRARY_PATH

最佳答案

根据您运行脚本的方式,env 变量只会添加到运行脚本的子 shell 的环境中。

如果你像这样运行脚本:

$ ./script.sh

这将生成一个新的 shell,脚本将在其中运行。父 shell,即您从中启动脚本的 shell,不会受到脚本的影响。因此,对环境的更改将不可见(更改工作目录或类似操作也将不起作用)。

如果脚本旨在修改当前 shell 的环境,则需要使用 .source 命令获取脚本:

$ . ./script.sh
$ source ./script.sh

来自 bash 中的 help source:

Execute commands from a file in the current shell.

那么代码好像有问题:

正如评论者之前所说,成功案例printf中有很多感叹号。我认为这些是为了突出显示找到的变量名称。由于它们位于格式字符串的左引号之外,因此它们被解释为逻辑非运算符。

结果是格式字符串文字(指针)被取反,由于运算符的数量导致false。这通常映射到 0,这意味着格式字符串变为空指针。将空指针作为格式字符串传递给 printf 时会发生什么,据我所知,取决于实现。如果它没有崩溃,它肯定不会打印任何东西。

因此代码可能确实有效,但由于该错误,没有可见的输出。要修复它,请将感叹号移到格式字符串中,即在左引号之后。

关于c++ - 显示环境变量 LD_LIBRARY_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com