WSLサブシステムを初期化するには、あなたがbash.exe
直接を実行している場合は動作しません背景、中(隠された)バッシュコンソールウィンドウを起動する必要があります - それはで動作しますexec
でもexecFile
でもありません。 bash.exe
がコンソールがあるので、start
は使用できません。
トリックは、シェルのNode.jsが、残念ながら、行うことは容易ではないを、ブロックせずにbash.exe
を起動するために起動します(cmd
)プロセスを取得することですアプリケーションのため、start
がと同時にになります。
解決策は、auxを作成することです。 wscript.exe
を介して非同期に呼び出すことができるbash.exe
を起動するVBScriptファイル。 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)
});
}
注AUXこと。 VBScriptファイル%temp%\launchBashHidden.vbs
は呼び出し間に残っています。すべての実行後にそれを掃除するにはもっと多くの作業が必要です(非同期で実行されているため、wscript
がまだロードされていない可能性があるので、すぐに削除することはできません)。
OPの目的は、_commelfを渡すのではなく、引数なしで_bash.exe _itselfを起動することです(私が正しく理解していれば、WSLサブシステムを初期化するためにバックグラウンドで起動します)。やや効率的な 'execFile()'を使うべきであるように、デフォルトシェル( 'cmd')はうまくいくはずです。 しかし、どちらの方法もこの特定の実行ファイル( 'bash.exe')では動作しません。 – mklement0