VSCode: переменная среды в задаче не найдена

Я пытаюсь определить свои собственные переменные среды в файле tasks.json в VSCode. Просматривая каждую ссылку, которую я нашел до сих пор, я пробовал следующее:

{
"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 не заменяется. Также ни в cmd, ни в оболочке bash это не работает.

Я был бы очень благодарен за любую помощь, которую кто-нибудь мог бы мне оказать.


person EmbedEngineer    schedule 24.10.2018    source источник


Ответы (4)


Используйте$env:APP_NAME в вашем случае. См. ссылки на переменные среды.

Переменные среды

Вы также можете ссылаться на переменные среды с помощью синтаксиса ${env:Name} (например, ${env:PATH}).

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

Примечание. Обязательно укажите регистр имени переменной среды, например ${env:Path} в Windows.

person Mark    schedule 24.10.2018

Ваше использование неверно по 1 конкретной причине.

На переменные среды, используемые в объекте tasks.json options, нельзя ссылаться в других атрибутах задач, особенно на command в случае OPs:

параметры: переопределите значения по умолчанию для cwd (текущий рабочий каталог), env (переменные среды) или оболочки (оболочка по умолчанию). Параметры могут быть установлены для каждой задачи, но также глобально или для каждой платформы. На настроенные здесь переменные среды можно ссылаться только из сценария задачи или процесса, и они не будут разрешены, если они являются частью ваших аргументов, команды или других атрибутов задачи.

Просмотреть варианты

Попробуйте удалить ссылку на первый аргумент в сценарии ./scripts/build_app.py как значение для $APP_NAME и вместо этого используйте os.environ['APP_NAME'] изнутри в сценарии ./scripts/build_app.py.

person njappboy    schedule 04.07.2019

Переменные среды, установленные в tasks.json, не используются ${env:..} в tasks.json и не заменяются при передаче в качестве аргументов в оболочку. Однако вы можете добавить собственные настройки в settings.json и ссылаться на них в tasks.json с помощью ${config:...}.

e.g. 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
        }
    }
    ]
}
person patstew    schedule 07.05.2020

Если вы используете PowerShell, используйте %VAR% вместо $VAR.

"command": "python ./scripts/build_app.py %APP_NAME%",
person Kenzk447    schedule 24.10.2018
comment
Спасибо за быстрый ответ. К сожалению, я уже пробовал это, и это тоже не работает (по крайней мере, в PowerShell) - person EmbedEngineer; 24.10.2018