isShellCommand 属性 的实际作用是什么?您应该如何使用它?

What does the isShellCommand property actually do and how should you use it?

isShellCommand 属性 的实际作用是什么?您应该如何使用它?

悬停时的描述是:

"Specifies whether the command is a shell command or an external programm. Defaults to false if omitted"

https://code.visualstudio.com/Docs/editor/tasks 中,他们在示例中提到了它:

"We want to run the gulp command in a shell (VS Code directly executing it) so we used isShellCommand"

那么 shell 命令与外部程序有什么区别?

运行 isShellCommand = false 是否意味着 vsCode 不会 "directly executing it" 意味着它将 运行 "command" 并且不听任何它的输出(因为它 运行 它是一个外部命令?)这反过来意味着我们不能使用问题匹配器。

或者如果设置 isShellCommand = true 是否意味着 vscode 是 "directly executing it" 并且会跟踪它并监听生成的输出以便我们可以使用问题匹配器等与 vsCode?

考虑以下使用 tsc 编译 typescript 项目的示例:

c:\Users\J\Code\vscode-project>where tsc

C:\Program Files (x86)\Microsoft SDKs\TypeScript.4\tsc.exe
C:\Program Files (x86)\Microsoft SDKs\TypeScript.4\tsc.js
C:\Users\J\AppData\Roaming\npm\tsc
C:\Users\J\AppData\Roaming\npm\tsc.cmd

以及以下task.json

{
    "version": "0.1.0",

    // The command is tsc. Assumes that tsc has been installed using npm install -g typescript
    "command": "tsc",

    // The command is a shell script
    "isShellCommand": false,

    "args": ["-v"],

    "problemMatcher": "$tsc"
}

如果我现在运行任务输出版本:

message TS6029: Version 1.4.0.0

如果我将 isShellCommand 更改为 true,它将输出相同的结果

message TS6029: Version 1.4.0.0

所以我的想法是,如果我通过将 isShellCommand 设置为 true 并调用 .exe 文件来更改为调用外部程序,它不会给我任何输出,但它确实可以?!

{
    ...
    "command": "tsc.cmd"
    "isShellCommand": true,
}
message TS6029: Version 1.4.0.0

那么在什么情况下应该将isShellCommand设置为true/false?

一直试图在 vsCode 文档中找到有关所有这些的更多信息,但找不到任何东西,所以如果有人能指出 https://code.visualstudio.com/Docs 之外的任何资源,我也将非常感激。谢谢

当您想在 Visual Studio 代码中看到控制台输出时,您应该设置 "isShellCommand" = true。如果您不想在编辑器中看到结果,请将其设置为 false

我不知道为什么它在您的系统上表现不同。也许这是一个应该提交的错误 here

找到了我正在寻找的答案:https://github.com/Microsoft/vscode-docs/blob/master/docs/editor/tasks_appendix.md

/**
 * Specifies whether the command is a shell command and therefore must
 * be executed in a shell interpreter (e.g. cmd.exe, bash, ...).
 *
 * Defaults to false if omitted.
 */
isShellCommand?: boolean;