我试图在一个shell脚本中做一个git克隆,其中repo URL是动态评估的。我在下面的脚本中尝试过:
git clone 'git_repo_url'
工作良好
x='git_repo_url'; git clone $x
工作正常
我使用eval来动态创建repo URL,echo $(eval xyz)
给出了与上面完全相同的repo URL,即'git_repo_url'
-
git clone $(eval xyz)
失败,Permission denied (publickey)
错误。 -
同样,
x=$(eval xyz)
和git clone $x
也失败了Permission denied (publickey)
错误。
我的SSH密钥配置在默认位置~/。ssh和~/。Ssh/config就绪。我不知道这里出了什么问题。
这是我看到的(set -x; git clone $(eval xyz))
git clone ''''git_repo_url''''
所以这些引号和斜杠引起了这个问题,但不确定为什么。
为什么我使用eval
"git_repo_url"为各种项目导出为环境变量。环境变量的格式如下:
project_<project_name>_git='git_repo_url'
<project_name>
作为第一个输入参数传递给执行git克隆的shell脚本。所以要形成环境变量,我使用eval:
$(eval echo ${project_$1_git})
与其使用eval来构造您想要的值的回显,不如使用bash的扩展间接选项,它简单、安全、高效,…
urlname=project_${project_name}_git
git clone ${!urlname}