VSCode任务包装命令在' '在多行命令中引用破坏args

时间:2018-04-10 12:19:13

标签: visual-studio-code task

我试图创建一个运行带有一些参数的命令的VSCode任务。

"tasks": [
    {
        "label": "Execute in Max",
        "type": "shell",
        "command": "cd\\; C:\\MXSPyCOM.exe",
        "args": [
            "-f",
            "'${file}'"
        ],
        "problemMatcher": []
    }
]

从中我得到错误:

  

&安培; :模块' cd'无法加载。有关更多信息,请运行“导入 - 模块cd”。   在行:1 char:3   +& ' CD \; C:\ MXSPyCOM.exe' -f' c:\ Users \ ...   + ~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:ObjectNotFound:(cd \; C:\ MXSPyCOM.exe:String)[],CommandNotFoundException       + FullyQualifiedErrorId:CouldNotAutoLoadModule

我相当肯定问题是它试图执行的命令:'cd\; C:\MXSPyCOM.exe' -f 'c:\Users\由于某种原因,主命令块被包装在单引号中,这使得shell认为它是单个命令,当它的多个时。

这并没有发生这种情况,几个月前,当我上次使用它时,我确实使用了这个确切的命令。知道什么可能是错的吗?

1 个答案:

答案 0 :(得分:1)

是的,直到1.21.0 vscode只是在args中有空格时发出警告,最新版本包装命令和带有单引号的args,当它们里面有空格时。 只需通过

打破命令,使其中没有空格
"command": "cd\\;C:\\MXSPyCOM.exe",

"command": "cd\\;",
"args": [
            "C:\\MXSPyCOM.exe",
            ...

如果没有这样的选项(例如将命令传递给ssh会话),我所做的是:

"command": "ssh",
"args": [
            "host_name",
            "bash",
            "-c",
            "'\"",
            "cd /some_dir;",
            ...
            "\"'"
        ],

快速而肮脏的解决方法是根本不使用args字段,并在command中拥有完整命令。

另一个解决方案是编写自己的脚本,然后从tasks.json

中调用它们