5

bash 補完スクリプトでは、COMPREPLY=(aa/ba/ aa/bb/). スクリプトが呼び出されると、補完オプションは次のようにユーザーに表示されます。

$ foo aa/b<TAB>
aa/ba/
aa/bb/

ただし、これらのオプションの表示方法をもう少し制御したいと考えています。特に、各 COMPREPLY オプションの部分文字列のみをユーザーに表示したいと考えています。これは、現在の bash でのディレクトリ補完の仕組みと同様です。

$ foo aa/b<TAB>
ba/
bb/

bashでこれを行う方法はありますか?

4

2 に答える 2

5

私は同じ問題を抱えていたので、補完機能をコマンドにバインドする方法を調整して修正しました。ファイルシステム内の実際のファイルを扱っているときにこれが機能することはわかっています。オプションのようなあらゆる種類のファイルパスで機能すると思いますが、よくわかりません。

前:

complete -F _fubar fubar

後:

complete -o filenames -F _fubar fubar

詳細: Programmable Completion Builtins

于 2012-02-28T17:10:02.467 に答える
2

debian sid /etc/bash_completion から取得した次のコードが役立ちます。

# Remove colon-word prefix from COMPREPLY items
local colon_word=${1%${1##*:}}
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
    COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"}
done
于 2010-10-17T18:59:28.187 に答える