質問
書いたユーティリティスクリプトの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と矛盾していますか?多分あなたはバグバッシュメーリングリストを試すことができますか?