【问题标题】:What does the isShellCommand property actually do and how should you use it?isShellCommand 属性实际上是做什么的,应该如何使用它?
【发布时间】:2015-10-22 12:51:43
【问题描述】:

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 之外的任何资源,我也将非常感激。谢谢

【问题讨论】:

  • 请注意 isShellCommand 属性自 vs 代码 1.14 以来已被弃用 - 将带有 "type": "shell" 的 shell 属性放到您的任务中。如需更多更改,请查看此处:code.visualstudio.com/updates/v1_14
  • 您不应该使用它,因为它已被 Microsoft 弃用。

标签: visual-studio-code


【解决方案1】:

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

【讨论】:

  • 这很有帮助,因为它似乎提供了一种从命令外壳而不是直接在 VSCode 中运行多种类型任务的方法。
  • 链接失效
【解决方案2】:

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

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

【讨论】:

  • 如果我想查看或禁用输出,我可以使用“showOutput”:“always”或“silent”。还是您的意思是当前任务的问题匹配器的结果? @Wosi
猜你喜欢
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
相关资源
最近更新 更多