
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
が、動作している間は修正しようとはしません。