2

基本的には入力したいのですshowが、コマンドまたはエイリアスが定義されているかどうかを確認してshow起動し、定義されていない firesgit showです。

たとえば、rmする必要がありますが、行う必要rmcheckoutありますgit checkout

でこれをプログラムすることは可能bashrcですか?

4

5 に答える 5

4

これは驚くほど簡単です。

master tmp$ trap 'git $BASH_COMMAND' ERR
master tmp$ touch foo
master tmp$ rm foo
master tmp$ add foo
bash: add: command not found
fatal: pathspec 'tmp/foo' did not match any files
master tmp$ branch
bash: branch: command not found
  aix
  allocators
  ...

これは通常のコマンドtouchrmコマンドを実行しますが、コマンドがないため実行addされ、コマンドgit add fooがないためbranch実行されますgit branch

trap コマンドは、コマンドが見つからない場合だけでなく、エラーが発生したときに実行されます。たとえば、 is 127 かどうかをチェックするスクリプトを実行し$?(コマンドが見つからない場合にコード bash が設定されます)、代わりに git で実行するかどうかをチェックします (たとえば、git-xxxwhere xxxisというコマンドをチェックすることにより)。の最初の単語$BASH_COMMAND)。それは読者の練習問題として残しておきます。

于 2012-10-09T00:34:06.103 に答える
2

bashコマンドが見つからない場合は、呼び出しますcommand_not_found_handle(定義されている場合)。次のように定義できます。

command_not_found_handle () {
    git "$@" || { echo "$1 not a 'git' command either"; exit 127; }
}
于 2012-10-09T13:01:12.313 に答える
2

必要なものを達成するための簡単で適切な方法はありません。~/.bashrcすべてのコマンドにエイリアスを作成するのが最善だと思いgitます。

しかし、多くのディストリビューションでは、チェックすると、エイリアスのように見えるメインman gitの磁器コマンドがいくつかあります。

を使用してそれらすべてをリストできます

PAGER= man git | grep -oP 'git-\w+(?=\()'
于 2012-10-09T00:46:50.893 に答える
0

すべての git コマンドのリストを取得する 1 つの方法を次に示します。

git help -a | egrep '^  [a-zA-Z0-9]' | xargs -n1 | sed 's/--.*//' | sort -u

または、 の内容を使用することもできますcontrib/completion/git-completion.sh: (とにかくループする可能性があるため、これの方がおそらく優れています。注: 重複を考慮する必要がありますが、重複は実際には問題ではありませんalias)

__git_list_all_commands ()
{
    local i IFS=" "$'\n'
    for i in $(git help -a|egrep '^  [a-zA-Z0-9]')
    do
        case $i in
        *--*)             : helper pattern;;
        *) echo $i;;
        esac
    done
}
于 2012-10-09T01:19:12.277 に答える
0

あなたに追加~/.bashrc

alias show='git show'
alias checkout='git checkout'
...

すでに別の処理を行っているコマンドのエイリアスを作成しないように注意してください。これにより、他のプログラムが壊れる可能性があります。

于 2012-10-09T00:29:00.540 に答える