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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:05:19