我使用的是 Debian Jessie 8.6。我注意到,apt-get
当按包和命令的选项卡时,会得到预期的 bash 自动完成,但当尝试将其与它一起使用时,它apt
不起作用。我记得使用的是 xubuntu 16.04,它可以工作,所以我觉得很奇怪,它在这里不起作用。有没有办法apt
也为命令启用它?如果是这样,怎么办?
答案1
Debian 没有安装和启用“bash-completion”。
如果您是从 Ubuntu 背景进入 Debian 的,那么它是预安装并默认启用的,这可能会造成一些混乱。
要启用/“修复”此问题,请运行(以 root 身份):
apt-get install bash-completion
然后,你有两个选择。您可以:
1. 为自己的每个用户启用它,或者
2. 全局启用。
1. 如果您只想为您的用户启用它,请编辑~/.bashrc
- 添加以下内容:
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
要在不注销并重新登录的情况下尝试它,请运行:
. ~/.bashrc
或者打开一个新的外壳。然后尝试使用 apt 来完成制表符补全。开头的点和空格 ( .
) 与 bash 中使用关键字相同source
,但更可移植。
su
如果您希望它在进入 root 帐户时工作,请在 root 的主目录中执行相同的操作(通常/root
)。
2.要全局启用它,请从 (1) 在文件中/etc/bash.bashrc
代替。
对于任何想知道为什么会起作用的人来说,.
前面的/etc/bash_completion
确实不是引用当前目录,因为它周围有空格。相反,它使给定文件的内容在当前运行的 shell 中计算,而不是在新的子 shell 中执行。这里已经标准化了。
在 Bash 中,这.
可以用 command 代替source
,但这不是 POSIX 标准化的,而且可移植性较差,所以我倾向于引导人们不要使用它。在这种情况下,由于它是专门用于扩展 bash 的程序,而不是需要在 bourne shell 或 中工作的程序ksh
,因此您可以随意替换source
可读性。
顺便说一句,这种行为(不打开子 shell)类似于 DOS/Windows .BAT 脚本正常工作的方式,改变它们运行的 shell 的状态。这就是为什么如果您cd
在 shell 脚本中进入不同的路径,当脚本退出时,您不会像在 .BAT 中那样位于该路径中。
答案2
在 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
我是怎么解决的
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
不仅从这一行中删除了 ALL :
https://github.com/scop/bash-completion/blob/master/completions/apt-get#L28
我是怎么走到这一步的?
set -v
我在运行previous to后到达了这一点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
希望这可以帮助。
答案4
将此配置文件从 Ubuntu:/usr/share/bash-completion/completions/apt 复制到 Jessie 中的同一目录。您还可以在此处获取该文件:http://pastebin.com/PRBMt3an