[LINUX] bash completion
bashで引数の補完動作を拡張させる方法がわかりました。
debianでは/etc/bash_completionに色々定義されているのでまずこれを読みこむように/etc/bash.bashrcの
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
のコメントを外して有効にするか、~/.bashrcなどから読みこむようにします。
自分で定義する場合例えばrootコマンドの引数で環境変数PATHから適当なものを補完したい場合
# root(1) completion
_root()
{
local cur conns
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
conns=$( \ls `echo $PATH | tr ':' ' '` )
if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $( compgen -o filenames -W "$conns" $cur ) )
fi
return 0
}
complete -F _root root
を~/.bash_completionに書いておけば、補完できる。ちなみに、/usr/share/doc/bash/completion-contrib/にいろいろ使えそうなコマンド(bitkeeperやriなど)用のスクリプトがあるのでこれらを/etc/bash_completion.d/以下においておけば使用できる。
追記(4/10)
上記のようなことしなくても/etc/bash_completionにあるbash関数_command()を使用するようにして、
complete -F _command root
すれば大丈夫です。しかし、/etc/bash_completionを読みこむとbashが遅い。。。
0 件のコメント:
コメントを投稿