在外壳中使用"eval"时不考虑SSH密钥



我试图在一个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

  1. "git_repo_url"为各种项目导出为环境变量。环境变量的格式如下:

    project_<project_name>_git='git_repo_url'

  2. <project_name>作为第一个输入参数传递给执行git克隆的shell脚本。

  3. 所以要形成环境变量,我使用eval:

    $(eval echo ${project_$1_git})

与其使用eval来构造您想要的值的回显,不如使用bash的扩展间接选项,它简单、安全、高效,…

urlname=project_${project_name}_git
git clone ${!urlname}

最新更新