我希望能够从JetBrains CLion中的特定运行/调试配置中的文件中获取一个或多个环境变量。据我所知,在撰写本文的时候,这个特别的问题是在堆栈溢出时未得到答复。。我认为它对其他JetBrains IDE的用户应该是有用的。
我以Python为背景,大量使用Python库在一个文件中定义了几个环境变量。这些文件的语法如下所示
VARIABLE_NAME=value这与我在shell脚本中定义(局部变量)的方式类似。
我过去使用过的其他语言都有模块(例如朱莉娅、节点)或内置功能(例如R),它们都遵循VARIABLE=value语法。我希望从IDE中的文件中获取环境变量应该有类似的感觉。
要么CLion没有,我只是不知道,要么我偶然发现了一个错误配置(更可能)或一个bug (不太可能)。
这个问题不是什么?
我不是想要设置CMake变量。我希望通过std::getenv将环境变量设置为对我的程序可见的。
对相关问题的回答推荐与CLion不兼容的插件。此外,CLion已经内置了对运行/调试配置中的源环境文件的支持,因此不需要插件。
我试过的
最小工作实例
下面是一个简单的C++程序,它输出一个环境变量:
#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的内容
TEST=hello(我试过用换行符,也不带换行符,但没什么区别。)
中断运行/调试配置
试图从该文件中获取环境变量似乎不起作用:

预期产出
/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实际输出
/home/alan/Documents/20201222-clion-env-file-test/cmake-build-debug/20201222_clion_env_file_test
TEST value:
Process finished with exit code 0工作运行/调试配置
显式定义变量的工作原理是:

预期产出
/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实际输出
/home/alan/Documents/20201222-clion-env-file-test/cmake-build-debug/20201222_clion_env_file_test
TEST value: hi
Process finished with exit code 0tl;dr
如果我从文件中设置了环境变量,为什么CLion不选择它们呢?
系统信息
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发布于 2020-12-22 17:19:26
CLion不遵循预期的语法,但文档没有明确说明这一点:
使用从文件字段加载变量,将CLion指向配置环境的脚本。
线索是文字剧本。如果您想让环境变量在脚本之外可用,您需要export它,就像在shell中一样:
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$作出必要的改变会产生预期的结果:
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在进行此更改后的输出:
/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语法的解释语言,这一点肯定不是很明显。
https://stackoverflow.com/questions/65413053
复制相似问题