Launch.json:如何引用环境变量 [英] Launch.json: how to reference an environment variable
问题描述
launch.json
中以preLaunchTask
身份运行。
在我的启动.json中,我现在尝试引用我在脚本中配置的环境变量(如export AWS_REGION="eu-west-1"
)。
启动.json如下所示:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
//..
"env": {
//"AWS_REGION": "us-east-1", //works
"AWS_REGION": "${env:AWS_REGION}", //doesn't work, why?
},
"args": [],
"preLaunchTask": "setupEnv",
}
] }
推荐答案
- 不起作用,为什么?
根据此post来自用户Weinand...
在VS代码替换之后读取和处理";.env";文件 变量。因此您的调试程序确实会 使用正确的值查看环境变量&foo; 启动.json中的代码变量替换将看不到它。 原因是文件是node.js概念,而不是 通用平台机制。所以VS代码不知道任何关于 .env文件,但node.js调试器知道.env文件。
.Launch.json中的此功能特定于在Node.js上运行的应用程序,尽管这不是M$在其documentationsfor VSCode中解释的。
- 可能的解决方案
对于Python应用程序(可能也适用于其他平台),只要您的应用程序中存在以下配置,.env文件(或您喜欢的名称)中定义的环境变量将可用于您的应用程序。
{
"version": "0.2.0",
"configurations": [
{
[...]
"envFile": "${workspaceFolder}/.env", // Path to the ".env" file.
[...]
}
]
}
请注意,仅导出变量...
export SOMEVAR_A=1234
...不会使环境变量SOMEVAR_A可用于VSCode调试器正在执行的应用程序也不会使设置可用,尤其是在和args";(;配置和)中-在启动ch.json中,例如...
{
"version": "0.2.0",
"configurations": [
{
[...]
"env": {
"SOMEVAR_A": "${env:SOMEVAR_A}"
},
"args": [
"${env:SOMEVAR_A}"
]
[...]
}
]
}
注意:在我们的测试中,${env:SOMEVAR_A}
语法在任何情况下都不起作用。也就是说,不适用于应用程序(";env";),也不适用于Launch.json中的设置(";args";)。
加i:Dirt Hack
对于";args";(&Quot;Configurations&)中存在的值,您可以使用下面的Hack...
{
"version": "0.2.0",
"configurations": [
{
[...]
"envFile": "${workspaceFolder}/.env",
"args": [
"`source "${workspaceFolder}/.env";echo ${SOMEVAR_A}`"
]
[...]
}
]
}
.因为";envFile中的配置不起作用。
请注意,以下结构...
[...]
"args": [
"`echo ${SOMEVAR_A}`"
]
[...]
.也适用于";args&,只要以前以常规方式导出了环境变量&qot;SOMEVAR_A&qot;。
同样的推理适用于任务(tasks.json),但在这两种情况下,我们不能保证这一点。
提示:一个.env文件示例
SOMEVAR_A="abcd"
SOMEVAR_B="efgh"
SOMEVAR_C=123456
加II:导出变量
在某些情况下,您需要导出变量(例如export SOMEVAR_A="abcd"
),以便它们可以被某些资源消耗。在这些情况下,可能会出现问题,因为我们导出变量的事实阻止(我们不知道为什么)在配置"envFile": "${workspaceFolder}/.env"
的上下文中看到它们。
绕过这些限制的解决方法是在变量集之前添加set -a
,在变量集之后添加set +a
。有了这一点,我们就能够满足本例中的两个场景...
#!/usr/bin/env bash
set -a
SOMEVAR_A="abcd"
SOMEVAR_B="efgh"
SOMEVAR_C=123456
set +a
.或者以更兼容、更安全的方式使用set -a
/set +a
,如本例所示...
[...]
"args": [
"`set -a;source "${workspaceFolder}/.env";set +a;echo ${SOMEVAR_A}`"
[...]
VSCode对环境变量的支持一团糟!
- 结论
我们不知道我们在这里处理的限制是来自VSCode自己的设计,还是错误。无论如何,这似乎没有多大意义。
这些过程在Manjaro Linux(基于Arch)上进行了测试。
谢谢!🤗
[参考文献:https://unix.stackexchange.com/a/79077/61742,https://stackoverflow.com/a/30969768/3223785]
这篇关于Launch.json:如何引用环境变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!