web-dev-qa-db-ja.com

コマンドに対してタブ補完が機能しない

Ubuntu 11.04 Beta 1のコマンドにタブ補完を使用して、すべての最新アップデートを実行しようとしていますが、機能していないようです。 (パッケージbash-completionはインストールされていますが)

タブ補完は、ディレクトリまたはファイルに対してのみ正しく機能します。

どこを掘るのか?

49
Screatch

.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 [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
65
Adam Byrtek

私はまた、bash補完の失敗について次の追加の説明を追加すると思いました-コメントには長すぎて、bash補完に問題がある人には役立つかもしれません、おそらくこれは「一般的な」標準的な質問すべての重複が参照されます。

(上記の回答のように).bashrcに適切な行があり、bash-completionパッケージがインストールされていても、shopt -s nullglobまたはshopt -s failglob.bashrcまたは.bash_aliasesがある場合、bashの完了は依然として誤動作する可能性があります。

以下のシナリオは、.bashrcおよび.bash_aliasesのすべてのユーザーカスタマイズを削除して、公正なテストを行うために削除され、適切なbash完了行が.bashrcに存在し、bash-completionがインストールされています。

1)最初のシナリオは、shopt -s failglobまたは.bashrc.bash_aliasesがある場合です。

それぞれ完全なディレクトリとファイルをタブで表示しようとすると、次のエラーが発生します。

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

ただし、コマンドは引き続き正常に完了します。

2)shopt -s nullglobを有効にすると、ディレクトリまたはファイルをタブ補完しようとすると、代わりにすべてが一覧表示され、補完されません:

cd Do
.Adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .Pulse/
............

非常に長く、すべてを再現する必要がないため、ここでリストを短くしました。

繰り返しますが、コマンド補完は引き続き機能します。

したがって、shopt -s failglobまたはshopt -s nullglobを削除するだけで、bashの完了に関するエラーの問題を解決できます。.bashrcおよびbash-completionに適切な行がインストールされていると仮定します。

13
user76204

/etc/bash.bashrcファイル(他の回答)の変更に加えて、bash-completionパッケージのインストールが必要になる場合があります。

/etc/bash_completionファイルが存在するかどうかを確認します。いいえの場合:

Sudo apt-get install bash-completion

(Debian 7の私のインストールでは、最初にインストールされませんでした)

9
SergeanT

基本的に聞こえるかもしれませんが、bashがアクティブなシェルであることを確認してください

echo $Shell

Ubuntu 14.04.1 LTSにアップグレードしたばかりで、この投稿のアドバイスに従った後でも、タブの自動補完はありませんでした。シェルが/bin/shではなく/bin/bashに設定されていることを認識するためだけです。

7
nocdib

Ubuntu 14.04.01への更新

.bashrcに次のフラグメントがあるかどうかを確認します(デフォルトで存在するはずです)

Sudo vim /etc/bash.bashrc(「i」と入力してファイルを編集します)

    # enable bash completion in interactive shells
    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

上記の7行のコメントを外します

保存ファイル「esc + w + q + enter」

Bashを再起動します

exec bash

1
Diego Arriola