首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是错误地从CLion中的文件中获取环境变量,还是env文件语法不正确?

我是错误地从CLion中的文件中获取环境变量,还是env文件语法不正确?
EN

Stack Overflow用户
提问于 2020-12-22 17:19:26
回答 1查看 607关注 0票数 0

我希望能够从JetBrains CLion中的特定运行/调试配置中的文件中获取一个或多个环境变量。据我所知,在撰写本文的时候,这个特别的问题是在堆栈溢出时未得到答复。。我认为它对其他JetBrains IDE的用户应该是有用的。

我以Python为背景,大量使用Python库在一个文件中定义了几个环境变量。这些文件的语法如下所示

代码语言:javascript
复制
VARIABLE_NAME=value

这与我在shell脚本中定义(局部变量)的方式类似。

我过去使用过的其他语言都有模块(例如朱莉娅节点)或内置功能(例如R),它们都遵循VARIABLE=value语法。我希望从IDE中的文件中获取环境变量应该有类似的感觉。

要么CLion没有,我只是不知道,要么我偶然发现了一个错误配置(更可能)或一个bug (不太可能)。

这个问题不是什么?

我不是想要设置CMake变量。我希望通过std::getenv将环境变量设置为对我的程序可见的。

对相关问题的回答推荐与CLion不兼容的插件。此外,CLion已经内置了对运行/调试配置中的源环境文件的支持,因此不需要插件。

我试过的

最小工作实例

下面是一个简单的C++程序,它输出一个环境变量:

代码语言:javascript
复制
#include <iostream>

int main() {
    auto test_val = getenv("TEST");
    std::cout << "TEST value: " << test_val << std::endl;
}

以下是/home/alan/Documents/20201222-clion-env-file-test/env的内容

代码语言:javascript
复制
TEST=hello

(我试过用换行符,也不带换行符,但没什么区别。)

中断运行/调试配置

试图从该文件中获取环境变量似乎不起作用:

预期产出

代码语言:javascript
复制
/home/alan/Documents/20201222-clion-env-file-test/cmake-build-debug/20201222_clion_env_file_test
TEST value: hello

Process finished with exit code 0

实际输出

代码语言:javascript
复制
/home/alan/Documents/20201222-clion-env-file-test/cmake-build-debug/20201222_clion_env_file_test
TEST value: 
Process finished with exit code 0

工作运行/调试配置

显式定义变量的工作原理是:

预期产出

代码语言:javascript
复制
/home/alan/Documents/20201222-clion-env-file-test/cmake-build-debug/20201222_clion_env_file_test
TEST value: hi

Process finished with exit code 0

实际输出

代码语言:javascript
复制
/home/alan/Documents/20201222-clion-env-file-test/cmake-build-debug/20201222_clion_env_file_test
TEST value: hi

Process finished with exit code 0

tl;dr

如果我从文件中设置了环境变量,为什么CLion不选择它们呢?

系统信息

代码语言:javascript
复制
CLion 2020.3
Build #CL-203.5981.166, built on December 1, 2020
...
Runtime version: 11.0.9+11-b1145.21 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Linux 5.8.0-7630-generic
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-22 17:19:26

CLion不遵循预期的语法,但文档没有明确说明这一点:

使用从文件字段加载变量,将CLion指向配置环境的脚本。

线索是文字剧本。如果您想让环境变量在脚本之外可用,您需要export它,就像在shell中一样:

代码语言:javascript
复制
alan@just-testing:~/Documents/20201222-clion-env-file-test$ cat ./env 
TEST=hello
alan@just-testing:~/Documents/20201222-clion-env-file-test$ source ./env && ./cmake-build-debug/20201222_clion_env_file_test 
TEST value: alan@just-testing:~/Documents/20201222-clion-env-file-test$

作出必要的改变会产生预期的结果:

代码语言:javascript
复制
alan@just-testing:~/Documents/20201222-clion-env-file-test$ cat env 
export TEST=hello
alan@just-testing:~/Documents/20201222-clion-env-file-test$ source ./env && ./cmake-build-debug/20201222_clion_env_file_test 
TEST value: hello

以下是CLion在进行此更改后的输出:

代码语言:javascript
复制
/home/alan/Documents/20201222-clion-env-file-test/cmake-build-debug/20201222_clion_env_file_test
TEST value: hello

Process finished with exit code 0

如果您有任何最近的C/C++经验,这可能是显而易见的,但是如果您使用了VARIABLE=value语法的解释语言,这一点肯定不是很明显。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65413053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档