web-dev-qa-db-ja.com

Debian-apt(apt-getではない)自動補完が機能しない

私はDebian Jessie 8.6を使用しています。きがついた apt-getは、パッケージとコマンドのタブを押したときに予期されるbashオートコンプリートを取得しますが、aptで使用しようとすると機能しません。機能したxubuntu 16.04を使用したことを覚えているので、ここで機能しないのは不思議です。コマンドaptでも有効にする方法はありますか?もしそうなら、どうですか?

20
Andrea

Debianには「bash-completion」がインストールされて有効になっていない。

これを修正するには、(rootとして)実行します。

apt-get install bash-completion

次に、2つのオプションがあります。 (1)自分でユーザーごとに有効にするか、(2)グローバルに有効にすることができます。

  1. ユーザーだけで有効にしたい場合は、~/.bashrcを編集し、次を追加します。

    if [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi
    

    ログアウトせずに再試行するには、次のコマンドを実行します。

    . ~/.bashrc
    

    または、新しいシェルを開きます。次に、aptでタブ補完を使用してみます。先頭のドットとスペース(.)は、bashでsourceキーワードを使用する場合と同じですが、移植性が高くなります。

    ルートアカウントにsuしたときに機能する場合は、ルートのホームディレクトリ(通常は/root)で同じことを行います。

  2. これをグローバルに有効にするには、代わりにファイル/etc/bash.bashrcで(1)からの変更を行います。

なぜこれが機能するのか不思議に思う人にとっては、.の前の/etc/bash_completionは現在のディレクトリを参照していませんので、周りにスペースがあります。代わりに、指定されたファイルの内容が、新しいサブシェルで実行されるのではなく、現在実行中のシェルで評価されます。 ここでは標準化されています。

Bashでは、この.はコマンドsourceで置き換えることができますが、POSIXでは標準化されておらず、移植性が低いため、他の人に使わないようにしています。この場合、それは特にbashを拡張するためのプログラムであり、ボーンシェルまたはkshで動作する必要があるものではないため、読みやすくするためにsourceを自由に使用できます。

19
Wyatt8740

Debian 9 Stretchでは/etc/bash.bashrcを編集してコメントを外してください:

# 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
6
4pie0

Ubuntuからこの構成ファイル/ usr/share/bash-completion/completions/aptをJessieの同じディレクトリにコピーします。ここでファイルを取得することもできます: http://Pastebin.com/PRBMt3an

3
minaev

解決方法

オートコンプリートでwgetapt-get install wg[TAB][TAB]でオートコンプリートしようとして問題が発生しました。以下のハエから--no-generateパラメータを削除することで解決できました。

/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get

これらのファイルはbash-completionをインストールした後にのみ使用できることを言及する価値があります。

私が参照している--no-generateパラメータは以下の行で確認できますが、この行だけでなく、すべての--no-generateを削除しました: https://github.com/scop/ bash-completion/blob/master/completions/apt-get#L28

どうやってここまで来たの?

set -vの前にapt-get install wg[TAB][TAB]を実行した後、この時点に到達しました。実行されたコマンドが次のとおりであることを示しています。

apt-cache --no-generate pkgnames wg

そして出力はエラーでした:

E: Could not open file  - open (2: No such file or directory)

apt-cache pkgnames wgなしで--no-generateを実行すると、オートコンプリートのリストが正しく取得されました。

root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

お役に立てれば。

1
Ruben Alves

問題はおそらく原因

Dir::Cache::pkgcache "";
Dir::Cache::srcpkgcache "";

/etc/apt/apt.conf.dの設定。私の場合、それはDebian Dockerイメージに由来します https://github.com/debuerreotype/debuerreotype/blob/799473bee3d388cf00bd55221b38a9d58bd6a2ba/scripts/debuerreotype-minimizing-config を参照してください

0
petr-tichy