子命令的Bash前缀命令名称

时间:2015-05-17 11:37:52

标签: git bash

是否有内置方法为Bash中的任何给定子命令隐式指定前缀命令名?

例如git有各种子命令,例如statusbranchlogmergecommit等,所以我希望能做的就像是;

export BASH_???=git # assume there is a variable or something to change Bash’s built-in behavior temporarily
status # instead of `git status`
branch # instead of `git branch`
...

P.S。:我知道https://github.com/thoughtbot/gitshhttps://github.com/rtomayko/git-shhttps://github.com/caglar/gitshhttps://github.com/defunkt/repl;但是这些项目“包裹”了git命令或任何命令而没有遵守用户的设置(例如PS1PROMPT_COMMAND等)。

3 个答案:

答案 0 :(得分:3)

我认为你能做到的最接近的事情就是使用command_not_found_handle(bash 4+)在你的git" sessions"中做这个间接。

这样大致(未经测试):

command_not_found_handle() {
    if ! PAGER=cat git "$1" --help >/dev/null 2>&1; then
        return $?
    fi

    git "$@"
}

答案 1 :(得分:1)

鉴于注释中讨论的命名空间问题,我会为选定的git子命令制作显式别名。为此,您可以使用这些bash函数

declare -a GITABBREVIATIONS=( status branch log merge commit )

function git_alias_init() {
   for cmd in "${GITABBREVIATIONS[@]}"; do
      alias "$cmd"='git '"$cmd"
   done
}

function git_alias_end() {
   for cmd in "${GITABBREVIATIONS[@]}"; do
      unalias "$cmd"
   done
}

您必须将其粘贴到.bashrc(或source git-abbreviations.sh来源)。然后你可以用

开始你的(别名)会话
$ git_alias_init

并以

结束
$ git_alias_end

答案 2 :(得分:0)

对于记录,这是一种替代方法,可以帮助任何可能对未来感兴趣的人。

这个想法是实现某种preexec bash函数,它可以在你可以实现自己的命令之前运行,并接受/拒绝命令或更改等。

Check it out.