显示环境变量LD_LIBRARY_PATH

我有简单的控制台应用程序,它打印环境变量:显示环境变量LD_LIBRARY_PATH

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

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

UPD

至于建议我脚本. ./script.sh 然后仔细检查与命令:

export |grep LD_LIBRARY_PATH 

得到输出:

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

但仍然没有看到我的PROGRAMM LD_LIBRARY_PATH

回答:

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

如果你像这样运行脚本:

$ ./script.sh 

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

如果脚本意欲修改当前外壳的环境中,脚本需要使用.source命令来采购:

$ . ./script.sh 

$ source ./script.sh

help source在bash:

执行命令来自当前shell中的文件。

再就是似乎是代码的一个问题:

作为一个评论者指出previousy,也有成功的案例printf很多的感叹号。我认为这些是为了强调找到的变量名称。由于它们不在格式字符串的开头引号之内,因此它们被解释为逻辑运算符而不是运算符。

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

因此,代码可能实际上工作,但由于该错误没有可见的输出。要修复它,请将感叹号移入格式字符串中,即在开始引号之后。

回答:

printf(!!!!!!!"%s\n", thisEnv); 更改为printf("!!!! %s\n", thisEnv);

回答:

它无关,与你的C/C++应用程序就行了。 尝试以下操作: $ ./script.sh $回声$ LD_LIBRARY_PATH ,你会看到那个LD_LIBRARY_PATH没有设置

当您启动脚本时,bash创建与环境的新工艺从原来的继承bash过程。在新创建的进程中,您设置了进程环境变量LD_LIBRARY_PATH = xxxx 最终确定后,script.sh退出,其环境随之死亡。

含义LD_LIBRARY_PATH未在您的原始shell中设置。

如上所述,您需要在当前shell中运行脚本 要么使用。或与来源。

我与你的C/C++测试,它的工作原理

以上是 显示环境变量LD_LIBRARY_PATH 的全部内容, 来源链接: utcz.com/qa/265825.html

回到顶部