我不知道该怎么问,但我想在Windows 10上运行'bash'命令,以便稍后运行一些linux命令。我正在使用Electron和Child Process框架。
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)
});
}
代码段给出“错误:命令失败:bash”。有谁知道为什么?你能帮帮我吗?我希望你理解我的问题。
答案 0 :(得分:1)
要初始化WSL子系统,您必须在后台启动(隐藏的)Bash 控制台窗口 ,如果您执行bash.exe
这不起作用直接 - 它既不适用于exec
也不适用execFile
。
诀窍是让Node.js生成的shell(cmd
)进程无法阻止启动bash.exe
,遗憾的是,这不容易做到:start
无法使用,因为bash.exe
是控制台应用程序,因此start
同步 。
解决方案是创建一个辅助。启动bash.exe
的VBScript文件,它本身可以通过wscript.exe
异步调用。请注意,Bash控制台窗口已启动隐藏:
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
,由于异步运行,可能还没有加载它。)
答案 1 :(得分:-1)
默认情况下,exec
将使用cmd.exe
在Windows中执行命令。您可能正在寻找的是the docs中指定的shell
选项。
shell
用shell执行命令(UNIX上的默认:'/ bin / sh',Windows上的'cmd.exe',shell应该了解UNIX上的-c开关或/ s / c on Windows。在Windows上,命令行解析应与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)
})
}
答案 2 :(得分:-1)
我找到了一种简单的方法:
C:\Program Files\Git\usr\bin
添加到您的路径变量。答案 3 :(得分:-2)
您可以通过使用WSL或虚拟机来使用Linux终端。您应该访问https://docs.microsoft.com/en-us/windows/wsl/install-win10来了解如何使用WSL安装Linux终端。或从下载虚拟化文件 https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/或https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/并使用Vmware,VirtualBox或Qemu启动它们。 最后一种方法是为Windows安装git。您可以从这里https://git-scm.com/download/win
下载它