长命令的快捷方式

时间:2013-03-12 11:40:39

标签: bash

问题

我经常需要与github交互,这经常让我写下如下行:

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

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

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

Tried Solutions

我的第一种方法是功能

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:<developer>/<project>之间存在空格字符。不过,我喜欢这种解决方案的简洁性。 如何使用bash最小化命令,最好是一行?

2 个答案:

答案 0 :(得分:3)

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

第一种情况的详细程度主要是由错误检查引起的。没有它它只是:

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

只有5个字符作为(非工作)别名。这将第一个参数与git@github.com:前缀组合在一起,并根据需要单独传递所有其他参数。

我认为,在.profile.bashrc中撰写时,详细程度不是问题。

注意,在所有其他shell中(如zsh,但也是破折号),函数体可以是任何命令,而不仅仅是复合命令,因此该函数与别名完全一样长:

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

遗憾的是 bash 不接受此。

答案 1 :(得分: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>}"; }

或没有任何错误

相关问题