Linux 如果git命令存在,则使用bash命令返回git命令
基本上,我想键入Linux 如果git命令存在,则使用bash命令返回git命令,linux,git,bash,command-line,terminal,Linux,Git,Bash,Command Line,Terminal,基本上,我想键入show,它检查是否定义了show命令或别名,并激发它,而未定义的则激发git show 例如,rm应该执行rm但是签出应该执行git签出 是否可以在bashrc中对此进行编程?添加到您的~/.bashrc: alias show='git show' alias checkout='git checkout' ... 注意不要为已经执行其他操作的命令创建别名。这可能会破坏其他程序。这非常简单: master tmp$ trap 'git $BASH_COMMAND' ERR
show
,它检查是否定义了show
命令或别名,并激发它,而未定义的则激发git show
例如,rm
应该执行rm
但是签出
应该执行git签出
是否可以在
bashrc
中对此进行编程?添加到您的~/.bashrc
:
alias show='git show'
alias checkout='git checkout'
...
注意不要为已经执行其他操作的命令创建别名。这可能会破坏其他程序。这非常简单:
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命令会在任何错误时运行,因此不仅仅是在找不到命令时。您可能想做一些更聪明的事情,例如运行一个脚本,检查
$?
是否为127(当找不到命令时,bash设置的代码),然后检查用git运行它是否有效(例如,通过检查名为git xxx
的命令,xxx
是$bash\u命令的第一个单词). 我把它留给读者作为练习。没有简单而正确的方法来实现你所需要的。我认为最好是在~/.bashrc
中为每个git
命令创建一个别名
但是在许多发行版上,如果您选中mangit,就会发现一些主要的命令看起来像别名
您可以使用
PAGER= man git | grep -oP 'git-\w+(?=\()'
以下是获取所有git命令列表的一种方法:
git help -a | egrep '^ [a-zA-Z0-9]' | xargs -n1 | sed 's/--.*//' | sort -u
或者您可以使用<代码> > ReIb/Calf/Git完成。SH < /C>:(这可能是更好的,因为您可能会循环。注意:您需要考虑重复,但对于<代码>别名<代码>),
并不重要。
当bash
找不到命令时,它调用command\u not\u found\u handle
(如果已定义)。您可以将其定义为如下所示:
command_not_found_handle () {
git "$@" || { echo "$1 not a 'git' command either"; exit 127; }
}
你可以为所有git命令定义别名,我更愿意让一个程序为我这样做。但是如果没有办法的话,那将是一个解决办法。听起来很奇怪。回退的触发因素是什么?如何在whow和git之间建立关系?哦,我在我的问题下评论说,我想要一个程序化的方法来做这件事。是的,但它相关吗?每次shell出现错误时,它都会将错误的命令传递给git。正如我在编辑中所说的,您可以通过检查错误类型并决定是否尝试运行git命令来处理该错误。命令本身很有趣,但过程似乎是错误的。为每个git命令添加一个别名并不是什么大不了的事。OP的感觉似乎有所不同,并询问是否可以这样做。我证明了这是可能的。
command_not_found_handle () {
git "$@" || { echo "$1 not a 'git' command either"; exit 127; }
}