2017-02-16 1 views
-1

묻는 방법을 모르겠지만 Windows 10에서 'bash'명령을 실행하여 나중에 일부 Linux 명령을 실행할 수 있습니다. 전자 및 하위 프로세스 프레임 워크를 사용하고 있습니다.Windows에서 Linux 터미널 명령을 실행하는 방법은 무엇입니까?

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

기본적으로 execcmd.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

영업의 의도는 원리에서, 아니 그것을 _commands_을 통과, (내가 제대로 이해하고 경우 WSL 서브 시스템을 초기화 할 수 있도록 배경에서 그것을 실행하는) arguments_없이, bash.exe' _itself'시작할 수 있도록하는 것입니다 약간 더 효율적인'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 파일 배쉬 콘솔 창은 숨겨진 시작됩니다 참고 :

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이 아직로드하지 않았기 때문에 바로 삭제할 수는 없습니다).

관련 문제