私はDebian Jessie 8.6を使用しています。きがついた apt-get
は、パッケージとコマンドのタブを押したときに予期されるbashオートコンプリートを取得しますが、apt
で使用しようとすると機能しません。機能したxubuntu 16.04を使用したことを覚えているので、ここで機能しないのは不思議です。コマンドapt
でも有効にする方法はありますか?もしそうなら、どうですか?
Debianには「bash-completion」がインストールされて有効になっていない。
これを修正するには、(rootとして)実行します。
apt-get install bash-completion
次に、2つのオプションがあります。 (1)自分でユーザーごとに有効にするか、(2)グローバルに有効にすることができます。
ユーザーだけで有効にしたい場合は、~/.bashrc
を編集し、次を追加します。
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
ログアウトせずに再試行するには、次のコマンドを実行します。
. ~/.bashrc
または、新しいシェルを開きます。次に、aptでタブ補完を使用してみます。先頭のドットとスペース(.
)は、bashでsource
キーワードを使用する場合と同じですが、移植性が高くなります。
ルートアカウントにsu
したときに機能する場合は、ルートのホームディレクトリ(通常は/root
)で同じことを行います。
これをグローバルに有効にするには、代わりにファイル/etc/bash.bashrc
で(1)からの変更を行います。
なぜこれが機能するのか不思議に思う人にとっては、.
の前の/etc/bash_completion
は現在のディレクトリを参照していませんので、周りにスペースがあります。代わりに、指定されたファイルの内容が、新しいサブシェルで実行されるのではなく、現在実行中のシェルで評価されます。 ここでは標準化されています。
Bashでは、この.
はコマンドsource
で置き換えることができますが、POSIXでは標準化されておらず、移植性が低いため、他の人に使わないようにしています。この場合、それは特にbashを拡張するためのプログラムであり、ボーンシェルまたはksh
で動作する必要があるものではないため、読みやすくするためにsource
を自由に使用できます。
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
Ubuntuからこの構成ファイル/ usr/share/bash-completion/completions/aptをJessieの同じディレクトリにコピーします。ここでファイルを取得することもできます: http://Pastebin.com/PRBMt3an
オートコンプリートでwget
をapt-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
お役に立てれば。
問題はおそらく原因
Dir::Cache::pkgcache "";
Dir::Cache::srcpkgcache "";
/etc/apt/apt.conf.d
の設定。私の場合、それはDebian Dockerイメージに由来します https://github.com/debuerreotype/debuerreotype/blob/799473bee3d388cf00bd55221b38a9d58bd6a2ba/scripts/debuerreotype-minimizing-config を参照してください