我正在尝试通过GIT_ASKPASS提供git密码,如下所示:
export PASSWORD=<secret>
export GIT_ASKPASS="/usr/bin/echo $PASSWORD"
git clone https://username@domain.com/git-repo/repo.git
但我明白了:
error: cannot run /usr/bin/echo <secret>: No such file or directory
所以我似乎不允许在GIT_ASKPASS
中提供参数?
现在我可以创建一个只包含以下内容的脚本:
/usr/bin/echo $PASSWORD
但我想知道:有没有办法在不创建临时脚本的情况下这样做?
答案 0 :(得分:4)
主要问题是整个变量被解释为程序名称。那么制作另一个脚本怎么样呢,我们称它为password_provider.sh
,它会告诉我们密码?
#! /bin/sh
echo <secret>
然后你可以运行:export GIT_ASKPASS="./password_provider.sh"
请记住,这意味着以纯文本格式存储密码,这通常不是一个好的安全措施。您应该尽可能使用公钥认证或真credential helper。
答案 1 :(得分:2)
您正在寻找错误位置的回声。尝试运行whereis echo
并替换它,在mac echo上位于/bin/echo
。
答案 2 :(得分:0)
正如其他人所说,您不能在字符串内传递参数。整个字符串被解释为命令。
# this works
echo foo
# this does not
"echo foo"
我经历了如何做的每一次可能的迭代:
我整理了每个清单。单。方法。确实有效。
我实际上建议使用 .gitconfig代替方法,但是对于GIT_ASKPASS,这就是我所做的:
如何创建GIT_ASKPASS
脚本:
echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass
如何使用它:
export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://token@code.example.com/project.git
脚本接收以下形式的标准输入:
Password for 'scheme://host.tld':
该脚本接收Git ENV,例如:
GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=
cheatsheet中的更多详细信息。