nodejs -转义.env中的变量字符

flmtquvp  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(246)

我的.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);
5n0oy7gb

5n0oy7gb1#

URL的用户名/密码部分应为percent encoded
node:url URL类将为您执行此操作

const repo = new URL(`https://github.com/my-repo/xyz-git-ops.git`)
repo.username = process.env.USERNAME
repo.password = process.env.PASSWORD

URL的.toString()对以下值进行编码:

> String(repo)
'https://userw:pass%%2F%40%23$@github.com/my-repo/xyz-git-ops.git'
> `${repo}`
'https://userw:pass%%2F%40%23$@github.com/my-repo/xyz-git-ops.git'

相关问题