我试图在cygwin环境下从casperjs脚本调用shell脚本。如果我使用" ls,pwd,find ..."等系统命令,则下面的代码打印输出。但是当我在execFile函数中指定custom.sh脚本时,它什么都不打印。看起来execFile并没有触发shell脚本。
var casper = require('casper').create({
verbose: true,
logLevel: 'debug',
});
var cp = require('child_process');
casper.start();
casper.then(function(){
cp.execFile('custom.sh', 'arg', {}, function (err, stdout, stderr) {
console.log("execFileSTDOUT:", JSON.stringify(stdout));
console.log("execFileSTDERR:", JSON.stringify(stderr));
});
casper.waitFor(function check () {
return false;
}, function then() {
console.log('Success').exit();
}, function timeout() {
this.echo("Timeout!!!").exit();
}, 3000)
});
casper.run();
custom.sh:
#!/bin/sh
echo >&2 some message
echo "code";
echo "xxx" > trigger.log
如果我直接从命令行运行它,custom.sh会打印输出:
$ custom.sh
some message
code
但是casper日志中没有任何内容:
$ casperjs test.js
[info] [phantom] Starting...
[info] [phantom] Running suite: 1 step
[debug] [phantom] Successfully injected Casper client-side utilities
execFileSTDOUT: ""
execFileSTDERR: ""
[info] [phantom] Step anonymous 1/1: done in 38ms.
[info] [phantom] Step _step 2/2: done in 50ms.
我尝试将custom.sh放在/ usr / bin中并指定绝对路径但没有成功。
修改
有一点需要提及 cp.execFile(' / usr / bin / ls',' /' - 什么都不返回 cp.execFile(' ls',' /' - 输出文件列表
答案 0 :(得分:0)
似乎问题与cygwin路径参数有关。
最后,下面的函数调用按预期工作:
cp.execFile('sh', 'custom.sh' ...