`apt-get` 软件包名称自动完成功能已损坏

`apt-get` 软件包名称自动完成功能已损坏

有时候,apt-get install自动完成功能会损坏。按下 时,查看可供安装的软件包名称对我来说非常有用Tab

例如,如果我按下Tab之后的键sudo apt-get install ruby,则会显示所有以 开头的包ruby,例如ruby-mysqlryby-dev等。

与此相反,如果我按下Tab,我会得到一个目录列表,就像我使用cd并按下时得到的一样Tab

如何修复这个自动完成功能?

答案1

正如对其他答案的评论所述,首先确保已bash-completion安装:

sudo apt-get install bash-completion

显然是为了@diapir,它有助于重新安装它:

sudo apt-get install --reinstall bash-completion

但是,对我来说,问题不是 bash-completion 没有安装或损坏,而是我不小心删除了我的.bashrc文件。你可以从以下位置复制一个新文件/etc/skel

cp /etc/skel/.bashrc ~/

答案2

键入以下命令:

sudo -H gedit /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

取消注释一些行,使其看起来像这样:

# 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

保存,关闭终端,然后重新打开它。

我在安装 13.04 后遇到了这个问题,这就是我解决它的方法。

答案3

请注意此命令的输出:

apt-config dump | grep "Dir::Cache"

应该是这样的:

Dir::Cache "var/cache/apt";
Dir::Cache::archives "archives/";
Dir::Cache::srcpkgcache "srcpkgcache.bin";
Dir::Cache::pkgcache "pkgcache.bin";

如果值为Dir::Cache::pkgcache空,apt 将无法自动完成软件包名称。请查看您的/etc/apt/apt.conf.d/文件并搜索此键以确保它未设置为空字符串。

grep -r pkgcache /etc/apt/apt.conf.d/

要修复它,请注释掉所有行/etc/apt/apt.conf.d/docker-clean

# DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
# APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
# Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";

进而

apt update

另请查看这个答案

答案4

bash-completion从下载最新的稳定版本http://bash-completion.alioth.debian.org/,并在下载的目录中使用以下命令来构建和安装它:

./configure
make
sudo make install

如果你还没有make安装,你可以使用以下包进行安装build-essential

sudo apt install build-essential

安装成功后,将以下行插入到您的~/.bashrc文件中:

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

相关内容