VSCode 任务将命令包装在' ' 引号中,从而破坏了多行命令上的参数

Oll*_*lli 4 task visual-studio-code

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

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

从那我得到错误:

& : 无法加载模块“cd”。有关更多信息,请运行“Import-Module cd”。在行:1 字符: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 认为它是一个命令,当它是多个命令时。

这过去没有发生过,几个月前我上次使用它时,这个确切的命令工作得很好。知道有什么问题吗?

ida*_*anp 6

是的,直到 1.21.0 vscode 在 args 中有空格时才发出警告,最新版本在命令和 args 中有空格时用单引号包装。只需打破命令使其中没有空格,要么

"command": "cd\\;C:\\MXSPyCOM.exe",
Run Code Online (Sandbox Code Playgroud)

或者

"command": "cd\\;",
"args": [
            "C:\\MXSPyCOM.exe",
            ...
Run Code Online (Sandbox Code Playgroud)

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

"command": "ssh",
"args": [
            "host_name",
            "bash",
            "-c",
            "'\"",
            "cd /some_dir;",
            ...
            "\"'"
        ],
Run Code Online (Sandbox Code Playgroud)

快速而肮脏的解决方法是根本不使用该args字段,并在command.

另一种解决方案是编写自己的脚本,然后从 tasks.json 中调用它们