2009年2月3日

Bash 的可编程智能补全

不知道什么时候开始,发现在ubuntu下的scp,能智能补全远程主机下的文件名,猜想大概是bash做了什么恶心的操作吧。

今天搜索了一下,才知道是 bash 的 Programmable Completion. 可以自己定义补全的方式,网上文章挺多的,gosman 翻译了magic cli的文章,比较详细。

查看了下/etc/bash_completion 文件,果然是包罗万象,包含相当多程序的智能完成模式.
scp 的补全是:
ssh -o 'Batchmode yes' $userhost \
command ls -aF1d "$path*" 2>/dev/null | \
sed -e "s/[][(){}<>\",:;^&!$&=?\`|\\ ']/\\\\\\\\\\\\&/g" \
-e 's/[*@|=]$//g' -e 's/[^\/]$/& /g'

直接连上远程去ls. 好寒 . 果然是又实用又恶心. 有时连上慢点的机器要等好久.

如果是自己的程序要扩展bash completion. 可以写在/etc/bash_completion.d/目录下面.