VSCode:任务中的环境变量未找到

5

我正在尝试在VSCode的tasks.json中定义自己的环境变量。迄今为止,我找到的每个链接都尝试了以下操作:

{
"version": "2.0.0",
"type": "shell",
"options": {
    "env": {
        "APP_NAME": "myApp"
    }
},
"problemMatcher": {
    "owner": "cpp",
    "fileLocation": [
        "relative",
        "${workspaceFolder}"
    ],
    "pattern": {
        "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
        "file": 1,
        "line": 2,
        "column": 3,
        "severity": 4,
        "message": 5
    }
},
"presentation": {
    "echo": true,
    "reveal": "always",
    "focus": false,
    "panel": "dedicated",
    "showReuseMessage": false
},
"tasks": [
    {
        "label": "Build Release",
        "command": "python ./scripts/build_app.py $APP_NAME",
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
    ]
}

我需要这个是因为我们通过一个Python脚本来运行构建流程,因此我需要给它提供我想要构建的应用程序的名称。由于我还有用于测试、执行、调试等操作的Python脚本,我更愿意在tasks.json中只更改一次应用程序名称,而不是在每个任务中都更改。
根据准则,我所做的方式应该是可行的,但在PowerShell控制台中,$APP_NAME变量没有被替换。在命令提示符或Bash shell中也似乎无法工作。
如果有人能够给我任何帮助,我将非常感激。
4个回答

4

在您的情况下,使用$env:APP_NAME。请参见环境变量引用

环境变量

您还可以通过${env:Name}语法(例如${env:PATH})引用环境变量。

{
    "type": "node",
    "request": "launch",
    "name": "Launch Program",
    "program": "${workspaceFolder}/app.js",
    "cwd": "${workspaceFolder}",
    "args": [ "${env:USERNAME}" ]
}

注意:一定要匹配环境变量名称的大小写,例如在Windows上使用${env:Path}

3

tasks.json 中设置的环境变量不能通过 ${env:..} 在 tasks.json 中被识别出来,也不会在作为 shell 参数时被替换。但是你可以在 settings.json 中添加自定义设置,并且在 tasks.json 中使用 ${config:...} 引用这些设置。

例如,settings.json:

{
    "APP_NAME": "myApp",
}

tasks.json:

{
"version": "2.0.0",
"type": "shell",
"options": {
    "env": {
        "APP_NAME": "${config:APP_NAME}"
    }
},
"problemMatcher": {
    "owner": "cpp",
    "fileLocation": [
        "relative",
        "${workspaceFolder}"
    ],
    "pattern": {
        "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
        "file": 1,
        "line": 2,
        "column": 3,
        "severity": 4,
        "message": 5
    }
},
"presentation": {
    "echo": true,
    "reveal": "always",
    "focus": false,
    "panel": "dedicated",
    "showReuseMessage": false
},
"tasks": [
    {
        "label": "Build Release",
        "command": "python ./scripts/build_app.py ${config:APP_NAME}",
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
    ]
}

1
您的使用方式不正确,原因如下:
在tasks.json文件的options对象中使用的环境变量不能被引用到其他属性中,特别是在OP的情况下的command属性。
选项可以为每个任务设置,也可以全局或按平台设置。在此配置的环境变量只能从您的任务脚本或进程内部引用,并且如果它们是args、command或其他任务属性的一部分,则不会被解析。
请尝试将./scripts/build_app.py脚本中的对第一个参数的引用作为$APP_NAME的值删除,并改为在./scripts/build_app.py脚本中使用os.environ['APP_NAME']。 查看选项

0
如果您正在使用PowerShell,请使用%VAR%而不是$VAR
"command": "python ./scripts/build_app.py %APP_NAME%",

谢谢您的快速回复。不幸的是,我已经尝试过这个方法,但它在PowerShell中也无法工作。 - EmbedEngineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接