2017-02-16 6 views
-1

私は尋ねる方法がわかりませんが、Windows 10で 'bash'コマンドを実行して、一部のLinuxコマンドを後で実行したいと思います。私はフレームワークの電子と子プロセスを使用しています。Windowsでlinux terminalコマンドを実行するには?

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」と表示されます。なぜ誰が知っていますか?あなたは私を助けることができますか?あなたが私の質問を理解したことを願っています

答えて

-1

デフォルトでは、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) 
    }) 
} 
+0

OPの目的は、_commelfを渡すのではなく、引数なしで_bash.exe _itselfを起動することです(私が正しく理解していれば、WSLサブシステムを初期化するためにバックグラウンドで起動します)。やや効率的な 'execFile()'を使うべきであるように、デフォルトシェル( 'cmd')はうまくいくはずです。 しかし、どちらの方法もこの特定の実行ファイル( 'bash.exe')では動作しません。 – mklement0

1

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がまだロードされていない可能性があるので、すぐに削除することはできません)。

関連する問題