我是否错误地从 CLion 中的文件获取环境变量,或者 env 文件语法不正确?
Am I incorrectly sourcing environment variables from a file in CLion, or is env file syntax incorrect?
我希望能够从 JetBrains CLion 中特定 run/debug 配置中的文件获取一个或多个环境变量。
据我所知和撰写本文时,这个特定问题 has not been answered on Stack Overflow。我认为它应该对其他 JetBrains IDEs.
的用户有用
主要来自 Python 背景,我大量使用 Python dotenv 库在一个文件中定义多个环境变量。
这些文件中的语法类似于
VARIABLE_NAME=value
这看起来类似于我在 shell 脚本中定义(局部)变量的方式。
我过去使用过的其他语言的模块(例如 Julia, Node) or built-in functionality (e.g., R)都遵循此 VARIABLE=value
语法。
我希望从 IDE 中的文件获取环境变量应该有类似的感觉。
要么 CLion 没有,我只是不知道,要么我无意中发现了错误配置(更有可能)或错误(不太可能)。
这个问题不是什么
我不想 set CMake variables。我想通过 std::getenv
.
将环境变量设置为对我的程序可见
与 CLion 不兼容的 answer on a related question recommends a plugin。此外,CLion 已经内置了对 run/debug 配置中源环境文件的支持,因此不需要插件。
我试过的
最小工作示例
这是一个打印环境变量的简单 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
(我尝试过使用和不使用换行符,但没有任何区别。)
损坏的 run/debug 配置
尝试从此文件获取环境变量似乎不起作用:
预期产出
/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
工作run/debug配置
显式定义变量有效:
预期产出
/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 0
tl;博士
如果我从文件中设置环境变量,为什么 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
CLion 不遵循预期的语法,但 documentation 没有明确说明:
Use the Load variables from file field to point CLion to a script that configures the environment.
线索是脚本这个词。如果您希望环境变量在脚本之外可用,您需要 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
语法的解释型语言,这绝对不是显而易见的.
我希望能够从 JetBrains CLion 中特定 run/debug 配置中的文件获取一个或多个环境变量。 据我所知和撰写本文时,这个特定问题 has not been answered on Stack Overflow。我认为它应该对其他 JetBrains IDEs.
的用户有用主要来自 Python 背景,我大量使用 Python dotenv 库在一个文件中定义多个环境变量。 这些文件中的语法类似于
VARIABLE_NAME=value
这看起来类似于我在 shell 脚本中定义(局部)变量的方式。
我过去使用过的其他语言的模块(例如 Julia, Node) or built-in functionality (e.g., R)都遵循此 VARIABLE=value
语法。
我希望从 IDE 中的文件获取环境变量应该有类似的感觉。
要么 CLion 没有,我只是不知道,要么我无意中发现了错误配置(更有可能)或错误(不太可能)。
这个问题不是什么
我不想 set CMake variables。我想通过 std::getenv
.
与 CLion 不兼容的 answer on a related question recommends a plugin。此外,CLion 已经内置了对 run/debug 配置中源环境文件的支持,因此不需要插件。
我试过的
最小工作示例
这是一个打印环境变量的简单 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
(我尝试过使用和不使用换行符,但没有任何区别。)
损坏的 run/debug 配置
尝试从此文件获取环境变量似乎不起作用:
/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
工作run/debug配置
显式定义变量有效:
/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 0
tl;博士
如果我从文件中设置环境变量,为什么 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
CLion 不遵循预期的语法,但 documentation 没有明确说明:
Use the Load variables from file field to point CLion to a script that configures the environment.
线索是脚本这个词。如果您希望环境变量在脚本之外可用,您需要 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
语法的解释型语言,这绝对不是显而易见的.