Ответ 1
Это не полное общее решение, потому что больше нужно выполнить с некоторыми параметрами exec()
, но это должно позволить вам писать код, который будет работать с Unix, Windows и cygwin, дифференцируя два.
Это решение предполагает, что Cygwin устанавливается в каталог, имя которого включает строку cygwin
.
var child_process = require( 'child_process' )
, home = process.env.HOME
;
function exec( command, options, next ) {
if( /cygwin/.test( home ) ) {
command = home.replace( /(cygwin[0-9]*).*/, "$1" ) + "\\bin\\bash.exe -c '" + command.replace( /\\/g, '/' ).replace( /'/g, "\'" ) + "'";
}
child_process.exec( command, options, next );
}
Вы можете альтернативно уклониться от child_process.exec условно при работе под Cygwin:
var child_process = require( 'child_process' )
, home = process.env.HOME
;
if( /cygwin/.test( home ) ) {
var child_process_exec = child_process.exec
, bash = home.replace( /(cygwin[0-9]*).*/, "$1" ) + "\\bin\\bash.exe"
;
child_process.exec = function( command, options, next ) {
command = bash + " -c '" + command.replace( /\\/g, '/' ).replace( /'/g, "\'" ) + "'";
child_process_exec( command, options, next )
}
}