显示环境变量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