我的.env有两个简单的变量:
用户名:“我的用户名”密码:“我的密码&7”
问题是,当我尝试使用shell.exec传递git clone命令时,它似乎忽略了password变量中的'&7'。
shell.exec(`git clone https://${process.env.USERNAME}:${process.env.USERNAME}@github.com/my-repo/xyz-git-ops.git`);
它输出:
/bin/sh:7@gmy-repo/xyz-git-操作。没有此类文件或目录正在克隆到“mypassword”...致命错误:无法访问'https://myusername:mypassword/':URL使用错误/非法格式或缺少URL
我注意到一些奇怪的事情:
1 -它忽略我的密码值的最后2个字符'&7',git clone输出用'/'代替它。
2 -如果我执行console.log(process.env.USERNAME)
,它会完美地打印值:我的密码&7
所有这一切都让我想知道是否有办法从密码值中转义“&”字符,或者我通过shell.exec()
传递凭据的方法是完全错误的。
const nodeCron = require("node-cron");
const shell = require('shelljs');
const rpath = '/Users/myuser/Documents/Git Ops Cron/repos';
require('dotenv').config();
const start = Date.now();
const username = process.env.USERNAME
const password = process.env.PASSWORD
async function xyzGitOps(){
console.log("Running scheduled job", start);
shell.cd(rpath);
shell.exec(`git clone https://${username}:${password}@github.com/my-repo/xyz-git-ops.git`);
return console.log("Job finished");
}
const job = nodeCron.schedule("* * * * *", xyzGitOps);
1条答案
按热度按时间5n0oy7gb1#
URL的用户名/密码部分应为percent encoded。
node:url
URL类将为您执行此操作URL的
.toString()
对以下值进行编码: