-
2007-05-05
神奇的命令行:可编程的bash补全 - [LBE]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://gosman.blogbus.com/logs/5260844.html
原文:CLI magic: programable bash completion
作者:mysurface
译者:gosman(lianmingchang2008#gmail.com)
来自:http://gosman.blogbus.com/
版本:V 1.0.0
时间:2007-5-5
Ubuntu 以简单、友好的用户界面变的越来越流行。少量的单击就可以安装任何程序,在图形界面下完成配置等简便的操作。人们经常有这样的想法:也许有一天Ubuntu会成为像微软Windows 那样流行的操作系统。
不可能!通过图形用户界面使操作变得简单这个想法就是错误的。Ubuntu Feisty 集成大量的图形界面程序来减轻诸如网络、无线接入、VPN、多媒体解码等配置工作,同时也集成一些神奇的命令行特性,其中之一就是bash补全功能。
我们可能都有过按Tab键两次来使用方便的bash补全功能的经历。例如,当输入部分命令时按Tab键两次就会显示一个可用命令列表。例如输入:
svn [tab][tab]
将会列出以下命令:
svn svnadmin svndiff svndumpfilter svnlook svnpath svnserve svnsync svnversion
可编程的bash补全有什么特别呢?
如果bash补全也适用于 apt-get、svn、help 这类命令呢?
在用一个命令前我们经常要用 --help 或 -h 来查看该命令提供的选项。命令选项也能自动补全吗?
让我们看看 svn 命令:
svn c[tab][tab] cat checkout ci cleanup co commit copy cp
这就是说你可以使用 svn cat、svn checkout、svn ci 等。
并不是只有选项才有自动补全,它是可编程的,实际上你可以将特定功能(function)和特定命令绑定(write a function and bind it with a command)。以 apt-get 为例,通常列出以特定字符开头的安装包,比如'can---',我们可以:
apt-cache pkgnames can
但现在只需:
apt-get install can[tab][tab]
很酷不是吗?
另外一个例子,bash补全可以和某些文件格式和扩展名绑定.比如有一个名为 download 的目录用来存放 .tar.gz、.zip、.rar等存档文件。当你输入:
tar zxvf [tab][tab]
将只列出扩展名为.tar.gz的所有文件。
安装
一些Linux发行版已经默认安装,只需去掉在/etc/bash.bashrc中以下内容的注释来打开这项功能。
# enable bash completion in interactive shells if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi
基于Debian的发行版可以用apt-get安装:
apt-get install bash-completion
需要源代码和手动安装?http://www.caliban.org/bash/
想知道哪些命令具有自动补全功能?
complete | sort -o complete.txt
以上命令把所有具有bash补全功能的命令的信息输出到文件 complete.txt 中。我们用'complete'这个bash命令来定义bash补全功能。complete.txt 列出所有的complete命令行,这看起来有点复杂:
... complete -F _wvdial wvdial complete -g groupdel complete -g groupmod complete -g newgrp complete -j -P '%' disown complete -j -P '%' fg complete -j -P '%' jobs complete -o default -F _aptitude aptitude complete -o default -F _aspell aspell complete -o default -F _configure_func configure complete -o default -F _cvs cvs complete -o default -F _dpkg_reconfigure dpkg-reconfigure complete -o default -F _gpg gpg complete -o default -F _iconv iconv complete -o default -F _lftp lftp complete -o default -F _longopt env complete -o default -F _longopt netstat complete -o default -F _longopt seq complete -o default -F _longopt uname complete -o default -F _longopt units complete -o default -F _longopt wget complete -o default -F _look look ...
也许你不明白 -F -o 的意义,但可以从每行的最后几个单词知道哪些命令具有bash补全功能。例如wvdail、groupdel、units、wget有 bash 补全功能。
哪里有为自己的程序增加 bash 补全功能的参考信息?
Bash 的帮助文档(man)和bash在线参考.如果你只是想知道complete命令选项的意义和用法,可以参考Programmable Completion Builtins.
实际上定义所有功能(function)的代码都在 /etc/bash_completion 中。
其他有关bash补全的文章
- linux.com 的CLI Magic: Bash complete
- All About Linux 的CLI Magic: Bash complete
- linux-mag 的Bash Completion
随机文章:
Bash 补全技巧 2007-10-31需要超级用户权限的脚本 2007-09-04巧用分组缩短命令长度之二 2007-07-22录制和播放终端会话 2007-05-11神奇的命令行:找不到命令(command not found) 2007-05-05
收藏到:Del.icio.us







