从NodeJS执行cygwin命令

时间:2016-09-06 13:15:48

标签: node.js cygwin

使用Node的child_process模块,我想通过cygwin shell执行命令。这就是我正在尝试的:

var exec = require('child_process').execSync;
exec('mkdir -p a/b/c', {shell : 'c:/cygwin64/bin/bash.exe -c'});
TypeError: invalid data
    at WriteStream.Socket.write (net.js:641:11)
    at execSync (child_process.js:503:20)
    at repl:1:1
    at REPLServer.defaultEval (repl.js:262:27)
    at bound (domain.js:287:14)
    at REPLServer.runBound [as eval] (domain.js:300:12)
    at REPLServer. (repl.js:431:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:212:10)

我可以看到Node's child_process.js will add the /s and /c switches,无论设置了shell选项,bash.exe都不知道如何处理这些参数。

我找到了解决这个问题的方法,但这真的不太理想:

exec('c:/cygwin64/bin/bash.exe -c "mkdir -p a/b/c"');

执行上述操作显然只适用于Windows而不适用于unix系统。

如何从NodeJS在cygwin shell中执行命令?

1 个答案:

答案 0 :(得分:3)

这不是一个完整的通用解决方案,因为需要对a的某些选项进行更多操作,但这应该允许您编写可用于unix,Windows和cygwin的代码,区分后两个。

此解决方案假定Cygwin安装在名称中包含字符串b的目录中。

exec()

你可以在Cygwin下运行时有条件地劫持child_process.exec:

cygwin