bash のオートコンプリートはワイルドカードで失敗する

bash のオートコンプリートはワイルドカードで失敗する

bashこのシステムで使用する場合:

Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (2016-02-29) x86_64 GNU/Linux

シーケンス:

cd /tmp
touch test1.txt && touch test2.txt && touch test3.txt
ls test [tab][tab]

番組:

test1.txt test2.txt test3.txt

コマンドラインの下。

bashこれがオートコンプリートの動作を期待する方法です。

しかし、次のように入力すると:

ls test* [tab][tab]

(同じ結果を期待して) 得られるのは次のみです (つまり、オートコンプリートは次のように展開されます):

test1.txt

*したがって、末尾のアスタリスク ( ) ワイルドカードtest[23].txtは「到達不能」になります。少なくとも私のコンピュータでは、以前のバージョンの bash では、この 2 つのシーケンスで同じ結果が得られていたことは間違いありません。

他にもこの問題を抱えている人はいますか? これは変更可能なデフォルト設定 (Debian 8 など) ですか? (さまざまなシェル パラメータを設定および設定解除しようとしましたが、shopt効果はありませんでした)。

答え1

私にとってうまくいく解決策はこれです:~/.bashrc私は線を引いていました

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
   if [[ -f /usr/share/bash-completion/bash_completion ]]; then
      . /usr/share/bash-completion/bash_completion
   elif [[ -f /etc/bash_completion ]]; then
      . /etc/bash_completion
   fi
fi

これは、自動補完を処理するブロックだと思っていました。しかし、コメントアウトして新しいシェルを起動すると、機能するだけでなく、慣れ親しんだ状態に戻りました。

-clauseが何を意味するのかまだよく分かりませんifが、動作している間は修正しようとはしません。

関連情報