Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如果git命令存在,则使用bash命令返回git命令_Linux_Git_Bash_Command Line_Terminal - Fatal编程技术网

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; }
}