0

問題

私は非常に頻繁に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

私の2番目のアプローチはエイリアスでした:

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

ただし、このバージョンはまったく機能しません。これは、展開後にとの間にスペース文字があるためgit@github.com:です<developer>/<project>。しかし、私はそのソリューションの短さが好きです。コマンドをbashで、できれば1行で最小化するにはどうすればよいですか?

4

2 に答える 2

3

最初のアプローチは完全に柔軟です。使い方を学ぶ必要が"$@"あります。つまり、すべての引数が別々の単語として引用されています。

最初のケースの冗長性は、主にエラーチェックが原因です。それがなければ、それはただです:

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

これは、(機能していない)エイリアスとしてあと5文字だけです。これにより、最初の引数とプレフィックスが組み合わさgit@github.com:れ、必要に応じてすべての追加の引数が個別に渡されます。

.profileそれを書くとき、またはそれでも、冗長性は問題ではないと思い.bashrcます。

他のすべてのシェル(zshやダッシュなど)では、関数本体は複合コマンドだけでなく任意のコマンドにすることができるため、関数はエイリアスとまったく同じ長さであることに注意してください。

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:"$@"        
}

1行:

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

またはエラーなし

于 2013-03-12T12:41:07.173 に答える