如何将Node.js child_process spawn调用的.sh文件移入目录并正常运行
解决方案
1. 调整Node.js的spawn()调用
修改你的Node代码,让它指向shellScripts文件夹里的脚本,同时强制子进程工作目录为项目根目录:
const { spawn } = require('child_process'); const path = require('path'); // 确定项目根目录(如果当前Node脚本在项目根目录,直接用__dirname即可) const projectRoot = path.resolve(__dirname); // 调用目标shell脚本 spawn('bash', [path.join(projectRoot, 'shellScripts', 'node1.sh')], { stdio: 'inherit', shell: true, cwd: projectRoot // 确保子进程启动时处于项目根目录 });
如果你的Node脚本不在项目根目录(比如在src文件夹里),把projectRoot改成path.resolve(__dirname, '..'),根据实际目录层级调整即可。
2. 更新Shell脚本内容
把每个.sh文件的内容改成自动定位项目根目录,再执行命令:
#!/bin/bash # 获取当前脚本所在的绝对目录 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # 项目根目录是脚本目录的上级目录 PROJECT_ROOT=$(cd "$SCRIPT_DIR/.." && pwd) # 切换到项目根目录 cd "$PROJECT_ROOT" # 执行你的业务命令,比如npm run dev npm run dev
这种写法不管你从哪个目录启动脚本,都能精准定位到项目根目录,避免硬编码路径的问题。
3. 收尾验证
- 将所有
.sh文件移动到项目根目录下的shellScripts文件夹 - 给所有脚本添加可执行权限:
chmod +x shellScripts/*.sh - 运行Node代码,确认每个脚本都能正常启动
npm run dev
内容的提问来源于stack exchange,提问作者Taylor Lepper
相关产品推荐
相关产品推荐

