这几天使用Ubuntu的命令行时,总是莫名其妙的多少空格。
例如$ls /var
在正常情况下应该会出现$ls /var/
但是我现在成了$ls /var空格
老兄,/var是一个目录啊,不是一个文件,不能在后不乱添空格的。
这应该是bash补全出了问题。
产生问题的原因:https://bugs.launchpad.net/ubuntu/+source/bash-completion/+bug/769866/comments/10
意外的收获,自己写程序时,在linux环境中也来个参数补全。
秘密就在/etc/bash_completion.d中。
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!