如何通过VS Code中的输入变量启动特定任务?

时间:2019-02-18 10:00:02

标签: visual-studio-code

我正在尝试创建启动配置,其中环境变量由Shell脚本动态确定。即使command variable可以通过workbench.action.tasks.runTask启动任务,似乎也无法指定要运行的任务。 Input variables在这方面似乎更灵活一些,但我似乎无法使其正常工作。这是我得到的:

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/main.go",
            "env": {
                "XXX": "${input:foo}"
            },
            "args": []
        }
    ],
    "inputs": [
        {
            "type": "command",
            "id": "foo",
            "command": "workbench.action.tasks.runTask",
            "args": {
                "args": "bar",
            }
        }
    ]
}

tasks.json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "bar",
            "type": "shell",
            "command": "find /dev -name 'myspecialdevice*' -maxdepth 1"
        }
    ]
}

问题是仍在询问用户要运行哪个任务。我对launch.json的inputs.args部分最不确定。我真的不知道键值应该是多少。也许implementation有助于弄清楚这一点?

2 个答案:

答案 0 :(得分:0)

在您的launch.json中,尝试更换

"args": {
    "args": "bar",
}

使用

"args": ["bar"]

答案 1 :(得分:0)

这个答案与使用 vscode 任务并没有真正的关系,但是您的介绍性句子提供了动机/要解决的问题。

我遇到了同样的问题,想知道 vscode's input type:command。它提供了一种嵌入(自定义)vscode 命令 的方法——这看起来像是在此处嵌入(自定义)扩展的强大机制。但我没有找到一个内置命令,它只是执行一个 shell 脚本并返回它的标准输出。因此,恕我直言,需要一个扩展来捕获 shell 命令的输出。

例如https://marketplace.visualstudio.com/items?itemName=augustocdias.tasks-shell-input 提供执行此操作的命令 shellCommand.execute

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/main.go",
            "env": {
                "XXX": "${input:foo}"
            },
            "args": []
        }
    ],
    "inputs": [
        {
            "id": "foo",
            "type": "command",
            "command": "shellCommand.execute",
            "args": {
                "command": "find /dev -name 'myspecialdevice*' -maxdepth 1",
                "cwd": "${workspaceFolder}",
                /* To prevent user from selecting output (if there is just
                   one line printed by command), un-comment next line */
                //"useSingleResult": true
            }
        }
    ]
}

(灵感来自https://stackoverflow.com/a/58930746/1903441