Для инициализации подсистемы WsL, необходимо запустить (скрытый) Баш окно консолив фоновом режиме, который не работает, если вы выполняете bash.exe
непосредственно - она работает с ни exec
не execFile
.
Хитрость заключается в том, чтобы получить оболочку (cmd
) процесса, который Node.js нерестится запустить bash.exe
без блокировки, который, к сожалению, не так легко сделать: start
не может быть использован, так как bash.exe
является консоли применение и поэтому составляет start
акт синхронно.
Решение заключается в создании aux. VBScript, который запускает bash.exe
, который сам может быть вызван асинхронно через 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
, из-за асинхронного запуска, возможно, его еще не загрузили).
Цель OP состоит в том, чтобы запустить 'bash.exe' _ самостоятельно, без аргументов_ (чтобы запустить его в фоновом режиме, чтобы инициализировать подсистему WSL, если я правильно понимаю), не передавать _commands_, поэтому в принципе default shell ('cmd') должен быть точным, так как должен использоваться немного более эффективный' execFile() 'be. Однако ни один из методов не работает с этим конкретным исполняемым файлом ('bash.exe'). – mklement0