isShellCommand属性实际上做了什么以及如何使用它?

时间:2015-10-22 12:51:43

标签: visual-studio-code

isShellCommand属性实际上做了什么以及如何使用它?

悬停时的描述说:

“指定命令是shell命令还是外部程序。如果省略,则默认为false”

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

“我们想在shell中运行gulp命令(VS Code直接执行它)所以我们使用isShellCommand”

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

运行isShellCommand = false意味着vsCode不会“直接执行它”,这意味着它将运行“命令”并且不会监听它的任何输出(因为它将它作为外部命令运行?)反过来意味着我们不能使用问题匹配器。

或者,如果设置isShellCommand = true,是否意味着vscode“直接执行它”并将跟踪它并监听生成的输出,以便我们可以使用问题匹配器等与vsCode集成?

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

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

C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.4\tsc.exe
C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.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以外的任何资源,我将非常感激。感谢

2 个答案:

答案 0 :(得分:2)

找到我正在寻找的答案: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;

答案 1 :(得分:0)

如果要在Visual Studio Code中查看控制台输出,则应设置"isShellCommand" = true。如果您不想在编辑器中查看结果,请将其设置为false

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