Launch.json:如何引用环境变量 [英] Launch.json: how to reference an environment variable

查看:19
本文介绍了Launch.json:如何引用环境变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了在一个地方定义我的环境变量,配置了一个运行外壳脚本的任务。该任务在我的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆