几个月前安装了Ubuntu 12.04,一直用着挺好,但最近一阵子,不知怎么了,ls目录时很别扭。
比如,我当前目录下有个work目录,如下:
$ ls -F
work/
$ ls w<tab> //只敲一个w,然后按tab键补全
$ ls work //居然会是这个样子,work后是个空格(“ls /work ”),正常来讲,work是目录,应该末尾是/才对("ls /work/")
在网上找了好大一会儿才找着原因,是/etc/bash_completion.d在捣鬼。
解决办法是:
$sudo apt-get purge bash-completion
$sudo mv /etc/bash_completion.d /etc/bash_completion.d.bak
$sudo apt-get install bash-completion
然后,重新打开一个shell,就可以了。
下面这段文字是从网上找来的,放在这里:
Ubuntu 11.04, aka Natty Narwhal, was released on April 28th and so naturally I chose to break my perfectly functioning laptop to see what was new. That “upgrade” button really needs to read something like, “download and install new software then spend a week scouring the internet for information and trying to fix all the shit that just broke.” But that’s probably a little too verbose for the UX people.
What broke?
To be completely fair, most things did not break. It was mainly KDE (my default X session), that new Unity business, “classic” Gnome (not entirely broken, but severely wounded), and bash shell tab completion. Or, in other words, just a number of the most important parts for actually “using” my computer to “do things.” I apologize for blowing things out of proportion.
I’ve gotten KDE (and Gnome, but not Unity — it refuses to believe my hardware is sufficient to run it) back up and running now after deleting tons of old configuration files (.kde*, .gconf, selectively under .config…and a bunch of other stuff I’ve forgotten) and also by accepting that the combination of Compiz + KDE is no longer usable and switching out Compiz for KDE’s native window manager, KWin. I had originally ditched KWin because it didn’t play nice (broken desktop effects and resource hogging and slow and crash-y) with fglrx (the radeon graphics driver.) KWin runs with direct rendering and GLSL shaders disabled (on my ATI Mobility Radeon HD 3650) and it’s (mostly) not as good as Compiz + KDE used to be. But it is 90% as good and the best and only real current option.
About that bash completion…
And then there was the broken bash completion (<tab>-completion.) For example, typing “ls /et<tab>
” yielded “ls /etc
” and not “ls /etc/
” (note the extra space and lack of closing slash at the end.) Reinstalling bash-completion did not fix this problem for me. What did work was removing bash-completion, renaming /etc/bash_completion.d/
→ /etc/bash_completion.d.bak/
, and then reinstalling bash-completion.
user@machine:~$sudo apt-get purge bash-completion
user@machine:~$sudo mv /etc/bash_completion.d /etc/bash_completion.d.bak
user@machine:~$sudo apt-get install bash-completion
After reinstalling bash-completion, /etc/bash_completion.d/
reappeared. I diff
ed the two directories and the new one had way more stuff so I just rm -rf
ed the old one. I’m happy to say my bash completion is working again and I’m going to file this problem under ‘s.’ For “solved.”
Conclusion
Well, that was fun! Looking forward to willingly breaking my computer again in another 6 months! See you then!