群英汇 TopGit 改进 (4): tg 命令补齐
在 Bash 的 Shell 环境下,Linux 命令的命令补齐非常强大。
- 首先,要确保安装了 bash-completion 包
$ dpkg -l bash-completion ||/ 名称 版本 简介 +++-=================-=========-========================================== ii bash-completion 1:1.1-3 programmable completion for the bash shell
- 还有确认 Bash 的配置文件 /etc/bash.bashrc 已经开启了命令补齐,如下:
if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi
- Topgit 也提供 Bash 下的命令补齐,相应的脚本在目录 /etc/bash_completion.d/ 下
$ tg depend <TAB> bash: __git_find_subcommand: command not found add命令补齐报错!这是如何产生的呢?如何解决呢?
TopGit 命令行补齐的Bugfix
如前所述,理解了bash命令补齐的原理,就能很容易解决这个问题。- Bash 命令补齐,需要在 shell 运行时,加载 /etc/bash_completion 脚本。一般这是在 /etc/bash.bashrc 中完成加载的。
- /etc/bash_completion 脚本将 /etc/bash_completion.d/ 目录下的各个命令补齐的配置脚本读入环境变量中。
$ set | grep -C3 __git_find_subcommand _tg_depend () { local subcommands="add"; local subcommand="$(__git_find_subcommand "$subcommands")"; if [ -z "$subcommand" ]; then __tgcomp "$subcommands"; return;于是,剩下的事情就很简单了,找到 git 命令补齐中最新的分支扩展的实现脚本就解决问题了。改动后的相应的脚本:
$ set | grep -C3 __git_find_subcommand _tg_depend () { local subcommands="add"; local subcommand="$(__git_find_subcommand "$subcommands" 2>/dev/null || __git_find_on_cmdline "$subcommands" 2>/dev/null)"; if [ -z "$subcommand" ]; then __tgcomp "$subcommands"; return;代码我们提交到 Github 上,于您分享:群英汇 在 Github 上的 topgit 代码库的相关提交。