如何在 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.
我不知道怎么问,但我想 运行 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.