visual-studio-code - VSCode 任务将命令包装在 ' ' 引号中,在多行命令上破坏了参数

标签 visual-studio-code task

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

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

从那我得到错误:

& : The module 'cd' could not be loaded. For more information, run 'Import-Module cd'. At line: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.21.0 vscode 在 args 中有空格时才发出警告,最新版本在命令和 args 中有空格时用单引号包装。
只需打破命令使其中没有空格,要么

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

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

当没有这样的选项(例如将命令传递给 ssh session )时,我要做的是:
"command": "ssh",
"args": [
            "host_name",
            "bash",
            "-c",
            "'\"",
            "cd /some_dir;",
            ...
            "\"'"
        ],

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

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

关于visual-studio-code - VSCode 任务将命令包装在 ' ' 引号中,在多行命令上破坏了参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753483/

相关文章:

c# - 使用非托管资源即发即忘

javascript - 在 VS Code Webview 中使用 ES6 模块

c# - 使用 Task[] 对象引用时未设置为对象的实例

c# - Task.Id 属性的非唯一性意味着什么?

node.js - 我可以使用 VSCode 在本地运行/调试 Heroku Node.js 应用程序吗?

c# - 为什么 TaskFactory.StartNew 收到 CancellationToken

C# 简单的后台线程

javascript - 当我使用 prettier 和 ESLint 在 VSCode 上保存代码时如何设置自动关闭?

typescript - Visual Studio Code - TypeScript - 当 tsconfig.json 包含数据时不显示内联错误

go - Intellisense 不工作 golang 测试文件