2004/04/08

2004/04/08

[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 件のコメント: