如果存在git命令,则使bash命令回退到git命令

时间:2012-10-09 00:23:18

标签: linux git bash command-line terminal

基本上我想输入show并检查是否有show命令或别名已定义并触发它并且未定义它会触发git show

例如,rm应该rmcheckout应该git checkout

是否可以在bashrc

中对此进行编程

5 个答案:

答案 0 :(得分: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命令在任何错误上运行,因此不仅在找不到命令时也是如此。您可能想要做一些更聪明的事情,例如运行一个脚本,检查$?是否为127(代码bash在找不到命令时设置),然后检查是否使用git运行它(例如通过检查名为git-xxx的命令xxx$BASH_COMMAND)的第一个单词。我把它作为读者的练习。

答案 1 :(得分:2)

没有简单而恰当的方法来实现您的需求。我认为最好的做法是在~/.bashrc中为每个git命令创建一个别名。

但是在许多发行版中,如果你检查man git,那么有一些主瓷命令看起来像别名。

您可以使用

列出所有这些内容
PAGER= man git | grep -oP 'git-\w+(?=\()'

答案 2 :(得分:2)

bash无法找到命令时,它会调用command_not_found_handle(如果已定义)。您可以将其定义为如下所示:

command_not_found_handle () {
    git "$@" || { echo "$1 not a 'git' command either"; exit 127; }
}

答案 3 :(得分:0)

添加到您的~/.bashrc

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

注意不要为已经执行其他操作的命令创建别名。这可能会打破其他程序。

答案 4 :(得分:0)

这是获取所有git命令列表的一种方法:

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

或者你可以使用contrib/completion/git-completion.sh中的内容:(这可能更好,因为你可能会循环。注意:你需要考虑重复,但它们对{{{{{{ 1}})

alias