如何在 windows 上 运行 linux 终端命令?

How to run linux terminal commands on windows?

我不知道怎么问,但我想 运行 windows 10 上的 'bash' 命令,这样一些 linux 命令 运行 稍后。我正在使用框架 Electron 和子进程。

var os = require('os')
var exec = require('child_process').exec
if (os.platform() =='win32'){
    var cmd_win = 'bash'
    exec(cmd_win, function(error, stdout, stderr){
        console.log(error)
    });
}

代码片段给出 "Error: Command failed: bash"。有谁知道为什么?你能帮我吗?我希望你理解我的问题。

默认情况下,exec 将使用 cmd.exe 来执行 windows 中的命令。您可能正在寻找的是 the docs.

中指定的 shell 选项

shell Shell to execute the command with (Default: '/bin/sh' on UNIX, 'cmd.exe' on Windows, The shell should understand the -c switch on UNIX or /s /c on Windows. On Windows, command line parsing should be compatible with cmd.exe.)

const os = require('os')
const exec = require('child_process').exec

if (os.platform() === 'win32') {
  exec('ls', {shell: 'path/to/executable.exe'}, (err, stdout, stderr) => {
    if (err) {
      console.error(err)
      return
    }

    console.log(stdout)
  })
}

要初始化 WSL 子系统,您必须在后台启动一个(隐藏的)Bash控制台window,如果您直接执行 bash.exe ,则它不起作用 - 它既不适用于 exec,也不适用于 execFile

诀窍是让 Node.js 生成的 shell (cmd) 进程在不阻塞的情况下启动 bash.exe , 不幸的是,这并不容易做到: start 不能使用,因为 bash.exe 是一个 console 应用程序,因此 start 行为同步.

解决办法是创建一个辅助。启动 bash.exe 的 VBScript 文件,它本身可以通过 wscript.exe 异步调用。请注意 Bash 控制台 window 已启动 隐藏:

var os = require('os')
var exec = require('child_process').exec
if (os.platform() === 'win32') {
  var cmd_win = '\
    echo  WScript.CreateObject("Shell.Application").\
      ShellExecute "bash", "", "", "open", 0 > %temp%\launchBashHidden.vbs \
    & wscript %temp%\launchBashHidden.vbs'
  exec(cmd_win, function(error, stdout, stderr){
      if (error) console.error(error)
  });
}

注意辅助。 VBScript 文件 %temp%\launchBashHidden.vbs 在两次调用之间徘徊。在每个 运行 之后清理它需要更多的工作(你不能马上删除它,因为 wscript,由于 运行 异步,可能还没有加载它)。

我找到了一个简短的方法来做到这一点:

  • 在您的计算机上安装 git
  • C:\Program Files\Git\usr\bin 添加到您的路径变量。
    并检查您是否可以 运行 linux 命令在 cmd.