我经常需要与github交互,这经常让我写下如下行:
$ git clone git@github.com:<developer>/<project> <foldername> <maybe_other_args>
现在我想将其最小化为以下内容(ghc
= github clone):
$ 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:
和<developer>/<project>
之间存在空格字符。不过,我喜欢这种解决方案的简洁性。 如何使用bash最小化命令,最好是一行?
答案 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>}"; }
或没有任何错误