質問

書いたユーティリティスクリプトのBash完了を設定しようとしているので、次のスクリプトを/etc/bash_completion.dに追加しました:

_mcd()
{
    local cur words
    COMPREPLY=()

    cur="${COMP_WORDS[COMP_CWORD]}"
    words=`mcd-completion-words`
    COMPREPLY=( $(compgen -W "${words}" -- "$cur") )
    return 0
}
complete -F _mcd mcd

mcd-completion-words スクリプトは、コマンドの利用可能な演算子をプログラム的に見つけます。 Bashを再起動すると(またはスクリプトのソース)、タブを正常に完了することができますが、そうすれば、完成した文字を越えてバックスペースができなくなります。

また、すべてのオプションをリストしようとすると(たとえば、単語なしで完了しようとします)、Bashはコマンドにタブを追加しますが、バックスペースもできません。

通常のファイル完了動作を模倣するにはどうすればよいですか?どんな助けも感謝しています。ありがとう!


これは、同じ動作を示しているMCD完了単語のテストケースの削減です。不思議なことに、デニスのケースも私のために機能します(たとえば、単語= "1つの2つの3"を置き換えるとき)。

#!/usr/bin/env php
<?php

print "one two three four five six seven eight nine";
役に立ちましたか?

解決

これが削減されたテストケースです。空の「PHP」コマンドでさえ、誤った完了動作を引き起こします。

$ _mcd() { php -r ""; COMPREPLY=( one ); }
$ complete -F _mcd mcd
$ mcd <TAB>            # Becomes 'mcd one' all right
$ mcd one <BACKSPACE>  # ERROR: doesn't work

これは、両方のBash-3.2.48/Bash-4.0.33およびPHP-5.2.6-3ubuntu4の両方のマシン(Ubuntu)上にあります。 Bash-3.2.39&PHP-5.2.6-1+Lenny9を備えた別のマシン(Debian)では、完了とバックスペースがすべて適切になります。

使用 perl -e "" それ以外の php -r "" また、大丈夫です。

何が起こっているのかわからない、PHPはReadlineと矛盾していますか?多分あなたはバグバッシュメーリングリストを試すことができますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top