Debian-apt(not apt-get)自动完成功能不起作用


19

我使用的是Debian Jessie 8.6。我注意到apt-get按包和命令选项卡时会达到预期的bash自动补全功能,但是尝试与它一起使用时apt不起作用。我记得曾经在xubuntu 16.04上使用过它,但是我觉得很奇怪,在这里不起作用。有没有办法为命令启用它apt?如果是这样,怎么办?


有什么适合您的吗?
Lynob

@Lynob我最终搬到了Ubuntu,对不起,我无能为力。
安德里亚(Andrea)

Answers:


19

Debian没有安装和启用“ bash-completion”。

要解决此问题,请以root身份运行:

apt-get install bash-completion

然后,您有两个选择。您可以(1)为每个用户自己启用它,或者(2)全局启用它。

  1. 如果只想为您的用户启用它,请编辑~/.bashrc-添加以下内容:

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

    要尝试而不注销并重新登录,请运行:

    . ~/.bashrc
    

    或打开一个新的外壳。然后尝试使用带有apt的制表符补全。开头(.)的点和空格与source在bash中使用关键字相同,但更便于携带。

    如果您希望它在su进入root帐户后能够正常工作,请在root的主目录中执行同一操作(通常是/root)。

  2. 要全局启用它,请/etc/bash.bashrc改为对文件中的(1)进行更改。

对于任何想知道为什么这样做的人.,前面的/etc/bash_completion不会引用当前目录,因为它周围有空格。相反,它使给定文件的内容在当前运行的Shell中进行评估,而不是在新的子Shell中执行。这里是标准化的。

在Bash中,.可以用命令替换它source,但是POSIX并没有对其进行标准化,并且它的可移植性较差,因此我倾向于使人们远离使用它。在这种情况下,由于它是专门用于扩展bash的程序,而不是需要在bourne shell或中运行的程序ksh,因此您可以随时替换source可读性。


2
我已经执行了这些步骤,但这没有帮助。仅适用于apt-get,但apt无效。
安德烈(Andrea)2016年

@安德里亚哦,对不起,我想我没有完全阅读您的问题。我现在不在我的Debian机器上(不幸的是,在Windows中,我只有Cygwin),但是当我回到家时,我会尝试从我的Debian机器上弄清楚它。
Wyatt8740 '16

5

在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

3

从Ubuntu复制此配置文件:/ usr / share / bash-completion / completions / apt到Jessie中的同一目录。您也可以在这里获取文件:http : //pastebin.com/PRBMt3an


这就是我所需要的。但是自动完成不适用于apt,我复制后将下载的apt文件重命名为/ usr / share / bash-completion / completions /。如何使其运作?
klor

pastebin.com/PRBMt3an文件是在Windows CR LF换行,这就是为什么它没有工作。我必须将行格式转换为Unix LF换行符,因此在启动新终端后可以正常工作。
klor

下面是正确的换行的“易”文件:filedropper.com/apt_1
klor

1

我是怎么解决的

我在尝试自动完成时遇到了自动完成问题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

希望这可以帮助。


正是我所需要的。谢谢:D
Ceisc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.