我使用的是Debian Jessie 8.6。我注意到apt-get
按包和命令选项卡时会达到预期的bash自动补全功能,但是尝试与它一起使用时apt
不起作用。我记得曾经在xubuntu 16.04上使用过它,但是我觉得很奇怪,在这里不起作用。有没有办法为命令启用它apt
?如果是这样,怎么办?
我使用的是Debian Jessie 8.6。我注意到apt-get
按包和命令选项卡时会达到预期的bash自动补全功能,但是尝试与它一起使用时apt
不起作用。我记得曾经在xubuntu 16.04上使用过它,但是我觉得很奇怪,在这里不起作用。有没有办法为命令启用它apt
?如果是这样,怎么办?
Answers:
Debian没有安装和启用“ bash-completion”。
要解决此问题,请以root身份运行:
apt-get install bash-completion
然后,您有两个选择。您可以(1)为每个用户自己启用它,或者(2)全局启用它。
如果只想为您的用户启用它,请编辑~/.bashrc
-添加以下内容:
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
要尝试而不注销并重新登录,请运行:
. ~/.bashrc
或打开一个新的外壳。然后尝试使用带有apt的制表符补全。开头(.
)的点和空格与source
在bash中使用关键字相同,但更便于携带。
如果您希望它在su
进入root帐户后能够正常工作,请在root的主目录中执行同一操作(通常是/root
)。
要全局启用它,请/etc/bash.bashrc
改为对文件中的(1)进行更改。
对于任何想知道为什么这样做的人.
,前面的/etc/bash_completion
都不会引用当前目录,因为它周围有空格。相反,它使给定文件的内容在当前运行的Shell中进行评估,而不是在新的子Shell中执行。这里是标准化的。
在Bash中,.
可以用命令替换它source
,但是POSIX并没有对其进行标准化,并且它的可移植性较差,因此我倾向于使人们远离使用它。在这种情况下,由于它是专门用于扩展bash的程序,而不是需要在bourne shell或中运行的程序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