You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中同步执行Shell脚本,完成后再执行页面重定向?

解决Shell脚本执行完毕后再重定向的问题

你的问题核心在于exec是异步执行的,当前代码里res.redirect('/Visualise')会在脚本刚启动就立刻执行,根本等不及脚本生成输出文件。要解决这个问题,你需要监听子进程的close事件——这个事件会在Shell脚本**完全执行完毕(不管成功还是失败)**后触发,这时候再执行重定向就没问题了。

修改后的代码如下:

router.post('/', function(req, res, next) {
  var id = req.body.id;
  console.log(id);
  
  const testscript = exec('sh script.sh');
  
  testscript.stdout.on('data', function(data){
    console.log(data);
    // sendBackInfo();
  });
  
  testscript.stderr.on('data', function(data){
    console.log(data);
    // triggerErrorStuff();
  });

  // 监听子进程关闭事件,脚本执行完毕后再重定向
  testscript.on('close', (code) => {
    console.log(`脚本执行完毕,退出码:${code}`);
    // 可选:根据退出码判断执行结果,再决定跳转逻辑
    // if (code === 0) {
    //   res.redirect('/Visualise');
    // } else {
    //   res.redirect('/error');
    // }
    res.redirect('/Visualise');
  });
});

关键点说明:

  • close事件是子进程结束的可靠标志,它会在所有标准输出/错误流都关闭后触发,确保脚本的所有操作(包括生成输出文件)都已经完成。
  • 通过code参数可以获取脚本的退出码,0通常代表执行成功,非0代表出错,你可以根据这个扩展逻辑,比如执行失败时跳转到错误提示页面,让整个流程更健壮。

内容的提问来源于stack exchange,提问作者vatsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:46:32