bash使用ruby代码并保存为变量

时间:2018-01-09 16:40:12

标签: ruby bash git

我的最终目标是解析视觉工作室团队服务ssh git url并使用它来克隆origin和我的fork。我在windows中,我使用git bash我已经制作了一些shell脚本来帮助我克隆它。在我们使用gitweb之前,我很容易解析,因为我可以运行git_clone myprojectgit_clone myproject.gitgit_clone git://ourgitserver.ourcompany.com/myproject.git并且脚本会将上面的内容克隆为原点并且还添加一个遥控器用户名以ssh://git@outgitserver.ourcompany.com/myproject.git的形式(并且它也很好地处理了名称空间)。好吧,我们开始使用vsts,我想做同样的事情。

git_clone方法改变了几次,因为人们会告诉我/我/给我发送git项目的链接。我希望能够只用最少的更改来复制和粘贴它。到目前为止,我有一个简单的git_vsts_close,它需要两个参数:项目名称和存储库名称。 (在gitweb中,我们将命名空间引用为vsts的项目,项目将是vsts的存储库)。暂时我想要使用ssh url或两个参数并执行所有git操作。简而言之,这就是我到目前为止所拥有的

function git_vsts_clone {
    local projectName=$1
    local repositoryName=$2
    if MISSING_ARG "usage: git_vsts_clone <project name> <repositoryName>\n  projectName must be provided\n  repositoryName must be provided" $projectName; then return 1; fi;
    if MISSING_ARG "usage: git_vsts_clone <project name> <repositoryName>\n  projectName must be provided\n  repositoryName must be provided" $repositoryName; then return 1; fi;

    local gitServer="ssh://mycompany@vs-ssh.visualstudio.com:22/${projectName}/_ssh/${repositoryName}"
    local clonePath="/c/git/${projectName}/${repositoryName}"
    local user_name=${USER:-${USERNAME}}

    if [ ! -d $clonePath ]; then
        INFO "Cloning $gitServer"
        git clone $gitServer $clonePath || { ERROR "ERROR cloning $gitServer"; return 1;}

        pushd $clonePath

        INFO "Updating Submodules (gsui)"
        git submodule update --init

        INFO "adding user fork ${user_name}"
        git remote add $user_name $gitServer.$user_name
        git fetch $user_name

        popd
        INFO "Opening $clonePath in vscode"
    fi
    code $clonePath
}

上次当我试图在bash中解析一个url时,我整个将一个项目拆分成一个数组。所以我决定尝试使用ruby(因为它有一个简单的分割方法)所以我尝试过像

这样的东西
$ gitServer='ssh://mycompany@vs-ssh.visualstudio.com:22/someProject/_ssh/myRepo'
$ ruby -e "a = '$gitServer'; b=a.split('/'); p b"
["ssh:", "", "mycompany@vs-ssh.visualstudio.com:22", "someProject", "_ssh", "myRepo"]
$ foo=`ruby -e "a = '$gitServer'; b=a.split('/'); p b"`
$ echo "${c[3]}"

$ echo "${c[0]}"
["ssh:", "", "mycompany@vs-ssh.visualstudio.com:22", "someProject", "_ssh", "myRepo"]

所以我不知道。我不必使用红宝石,它似乎只是一个简单的解决方案......现在不是那么多。那么如何使用ruby在bash或bash中从url中获取项目和存储库名称?

1 个答案:

答案 0 :(得分:3)

这是一种使用Ruby将值转换为环境变量的方法:

假设您有一个包含git repo url的URL环境变量,例如由以下行创建:

export URL='ssh://mycompany@vs-ssh.visualstudio.com:22/someProject/_ssh/myRepo'

您可以执行以下操作将所需的值放入其他环境变量中:

export PROJECT=`ruby -e "puts ENV['URL'].split('/')[3]"`
export REPO_NAME=`ruby -e "puts ENV['URL'].split('/')[5]"`