0

问题

我经常不得不与 github 交互,这常常让我写下如下一行:

$ git clone git@github.com:<developer>/<project> <foldername> <maybe_other_args>

现在我想将其最小化为以下内容(ghc=github克隆):

$ ghc <developer>/<project> <foldername> <maybe_other_args>

尝试过的解决方案

我的第一种方法是一个函数

ghc () {
    if [ -z "$1" ]; then
        echo "need to set param: <developer>/<project>"
    else
        git clone git@github.com:$1
    fi
}

我既不喜欢这种方法的冗长,也不喜欢git-clone.

我的第二种方法是别名:

alias ghc="git clone git@github.com:"

但是这个版本根本不起作用,因为展开后git@github.com:and之间有一个空格字符<developer>/<project>。不过,我喜欢这种解决方案的简短性。如何使用 bash 最小化命令,最好是一行?

4

2 回答 2

3

第一种方法非常灵活。你只需要学会使用"$@"这意味着所有的论点都被引用为单独的词。

第一种情况的冗长主要是由错误检查引起的。没有它,它只是:

ghc() { git clone "git@github.com:$@"; }

作为(非工作)别名仅多了 5 个字符。这会将第一个参数与git@github.com:前缀结合起来,并按照您的需要分别传递所有其他参数。

我不认为在编写时冗长是一个.profile问题.bashrc

请注意,在所有其他 shell(如 zsh,还有 dash)中,函数体可以是任何命令,而不仅仅是复合命令,因此该函数与别名一样长:

ghc() git clone "git@github.com:$@

不幸的是bash不接受这一点。

于 2013-03-12T11:55:10.810 回答
2

错误检查可以在bash. 但是函数的定义有多冗长真的重要吗,因为您可能会将它添加到配置文件中一次而不再查看它?

ghc () {
    : ${1?need to set param: <developer>/<project>}
    git clone git@github.com:"$@"        
}

一条线:

ghc () { git clone git@github.com:"${@?need to set param: <developer>/<project>}"; }

或没有任何错误

于 2013-03-12T12:41:07.173 回答