使用Node.js脚本调用shell.cd报错:No directory name could be guessed
问题
执行Node.js脚本时,调用shell.cd(path)抛出错误:
"No directory name could be guessed"
脚本代码如下:
const nodeCron = require("node-cron"); const shell = require('shelljs'); const path = './'; require('dotenv').config(); const start = Date.now(); async function GitOps(){ console.log("Running scheduled job", start); shell.cd(path); shell.exec('git clone -b dev https://',process.env.USERNAME,':',process.env.PASSWORD,'@github.com:Jamesmosley/xyz-git-ops.git'); return console.log("Job finished"); } const job = nodeCron.schedule("* * * * *", GitOps);
本意是将仓库克隆到当前工作目录,尝试过在path中写入pwd、在clone命令末尾添加./等方法均无效,例如:
shell.exec('git clone -b dev https://',process.env.USERNAME,':',process.env.PASSWORD,'@github.com:Jamesmosley/xyz-git-ops.git' ./);
解决方案
修复
shell.cd路径问题
使用./作为路径时,shelljs可能无法正确解析。其实脚本默认就在当前工作目录执行,完全可以移除shell.cd(path)这一行;如果一定要显式切换,改用process.cwd()获取当前工作目录的绝对路径:const path = process.cwd(); shell.cd(path);修复
shell.exec参数错误
当前将git命令拆分为多个参数传递给shell.exec,会导致命令执行失败。需将整个git命令拼接为单个字符串:const repoUrl = `https://${process.env.USERNAME}:${process.env.PASSWORD}@github.com/Jamesmosley/xyz-git-ops.git`; shell.exec(`git clone -b dev ${repoUrl}`);注意:直接在URL中拼接账号密码存在安全风险,建议改用SSH密钥或GitHub个人访问令牌(PAT)替代。
可选:指定克隆目录
若需明确指定克隆到当前目录下的特定文件夹,或覆盖默认仓库名称,可在clone命令末尾添加目录名:shell.exec(`git clone -b dev ${repoUrl} ./my-target-dir`);
内容的提问来源于stack exchange,提问作者c0d3rbox
相关产品推荐
相关产品推荐

