基本的には入力したいのですshow
が、コマンドまたはエイリアスが定義されているかどうかを確認してshow
起動し、定義されていない firesgit show
です。
たとえば、rm
する必要がありますが、行う必要rm
がcheckout
ありますgit checkout
。
でこれをプログラムすることは可能bashrc
ですか?
基本的には入力したいのですshow
が、コマンドまたはエイリアスが定義されているかどうかを確認してshow
起動し、定義されていない firesgit show
です。
たとえば、rm
する必要がありますが、行う必要rm
がcheckout
ありますgit checkout
。
でこれをプログラムすることは可能bashrc
ですか?
これは驚くほど簡単です。
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
...
これは通常のコマンドtouch
とrm
コマンドを実行しますが、コマンドがないため実行add
され、コマンドgit add foo
がないためbranch
実行されますgit branch
trap コマンドは、コマンドが見つからない場合だけでなく、エラーが発生したときに実行されます。たとえば、 is 127 かどうかをチェックするスクリプトを実行し$?
(コマンドが見つからない場合にコード bash が設定されます)、代わりに git で実行するかどうかをチェックします (たとえば、git-xxx
where xxx
isというコマンドをチェックすることにより)。の最初の単語$BASH_COMMAND
)。それは読者の練習問題として残しておきます。
bash
コマンドが見つからない場合は、呼び出しますcommand_not_found_handle
(定義されている場合)。次のように定義できます。
command_not_found_handle () {
git "$@" || { echo "$1 not a 'git' command either"; exit 127; }
}
必要なものを達成するための簡単で適切な方法はありません。~/.bashrc
すべてのコマンドにエイリアスを作成するのが最善だと思いgit
ます。
しかし、多くのディストリビューションでは、チェックすると、エイリアスのように見えるメインman git
の磁器コマンドがいくつかあります。
を使用してそれらすべてをリストできます
PAGER= man git | grep -oP 'git-\w+(?=\()'
すべての 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
}
あなたに追加~/.bashrc
:
alias show='git show'
alias checkout='git checkout'
...
すでに別の処理を行っているコマンドのエイリアスを作成しないように注意してください。これにより、他のプログラムが壊れる可能性があります。