Ubuntu 12.04.5 LTS下bash_completion及tab自动补全失效求助
我在处理旧Ubuntu系统的这类问题时积累了不少经验,给你几个针对性的排查和修复步骤:
第一步:确认bash-completion包是否安装
旧版本Ubuntu有时候默认没预装这个核心包,先检查:dpkg -l | grep bash-completion如果没有任何输出,就用apt安装:
sudo apt-get update && sudo apt-get install bash-completion第二步:修正.bashrc中的配置路径
Ubuntu 12.04的bash-completion文件路径是/etc/bash_completion,不是新版本的/usr/share/bash-completion/bash_completion。打开你的.bashrc:nano ~/.bashrc找到bash_completion相关的配置段,确保是这样的:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then . /etc/bash_completion fi如果原来的路径不对,改成上面的内容,保存退出后重新加载配置:
source ~/.bashrc第三步:排查是否有冲突的自定义配置
有时候你自己加的alias、函数或者其他环境配置会干扰补全功能。可以先测试一个干净的bash环境:bash --noprofile --norc在这个干净环境里试试tab补全,如果正常,说明你的.bashrc或.profile里有冲突内容,需要逐步注释掉部分内容排查。
第四步:关闭POSIX模式
POSIX模式会禁用bash的扩展功能(包括补全),检查是否开启:shopt -q posix && echo "POSIX mode enabled"如果输出这句话,关闭它:
shopt -u posix然后把
shopt -u posix加到你的.bashrc里,确保每次登录都生效。第五步:检查bash_completion文件的权限
权限错误也会导致无法加载补全脚本,检查:ls -l /etc/bash_completion正常权限应该是
-rw-r--r--(所有者root,组root)。如果权限不对,修复:sudo chmod 644 /etc/bash_completion
做完这些步骤后,新开一个终端测试tab补全,应该就能正常工作了。
内容的提问来源于stack exchange,提问作者ipfreak

