Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

After a recent update (Ubuntu 12.04 LTS), TAB complete on the command line is slow. After entering a partial command (e.g evi [TAB]) or partial filename (e.g. evince somedocu[TAB]) the shell, sometimes though not always, hangs for several seconds.

Personally, I'd prefer a less powerfull autocomplete to a slow one. Is there a simple fix?

Edit: Additional information related to comments:

  • PATH is pretty standard. ~/bin has some bash scripts

    $ echo $PATH
    /home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
    
  • The number of files in the working directory is less than 100.

  • The autocomplete feature was especially slow after unusual disk activity (system upgrade). It is, thus, possible, that rereading /usr/bin and other directories caused the lag.
share|improve this question
4  
isn't it that you enable your hard drive speed management with the update, and that the autocomplete waits for the disk to wake up to be able to compute the autocompletion ? – Vincent Nivoliers Apr 2 '13 at 14:43
2  
Does it depend on how many files are in your current directory? – terdon Apr 2 '13 at 15:02
    
What does # echo $PATH say? If you have many (several tens of thousands or more) of files in directories in your path, that might be causing it. – Stephan Apr 2 '13 at 18:20

I don't know about fixing — there are all kinds of things that could go cause delays. But I can offer a few tips to investigate.

Just as a guess, maybe there's a directory somewhere in a search path ($PATH, or some place where bash looks for completion data) that's on a filesystem which is slow to respond. Usually it's remote filesystems that are slow, but it could also be a failing hard disk, a hung FUSE driver, etc.

The first step to investigate is to run set -x to get a trace of the commands that the shell executes to generate the completions. Watch where it pauses.

If that doesn't give enough information, bring in the big guns. Note the shell's process ID (echo $$). In another terminal, run strace -f -s9999 -p$$ (or the equivalent of strace if running on another unix flavor). Strace lists the system calls performed by the process. See if it seems to be accessing files that it shouldn't, or if access to some files is slow. Adding the option -T to the strace command line makes it show the time spent in each system call.

share|improve this answer

If your *nix box is setup as an LDAP client you may have this problem, even logged in as a local user.

Boring debug info: Debugging with set-x, I found the completion that was hanging at:

> set -x
> ls foo<tab>
...                     <--- lots of output removed
...
+ _quote_readline_by_ref foo quoted
+ '[' -z foo ']'
+ [[ foo == \'* ]]      <--- froze here
+ [[ foo == ~* ]]       <--- actually causing the trouble

Confirm: I confirmed this with ls ~* which also hung. It turns out my ldap server was sluggish, but this shouldn't affect things like bash completion and ls!

Solution: Aha, there is a bug filed against bash-completion + ldap, it will be fixed in a newer version, and a simple patch if you don't want to wait. Tab completion is fast again, hooray!

Here's the patchfile in case the link goes away. It's merely escaping the ~ on lines 545 and 547:

--- /usr/share/bash-completion/bash_completion.orig 2014-11-06 10:36:14.981888369 +0100
+++ /usr/share/bash-completion/bash_completion  2014-11-06 10:36:25.142070963 +0100
@@ -542,9 +542,9 @@
     elif [[ $1 == \'* ]]; then
         # Leave out first character
         printf -v $2 %s "${1:1}"
-    elif [[ $1 == ~* ]]; then
+    elif [[ $1 == \~* ]]; then
         # avoid escaping first ~
-        printf -v $2 ~%q "${1:1}"
+        printf -v $2 \~%q "${1:1}"
     else
         printf -v $2 %q "$1"
     fi
share|improve this answer
1  
The patch seems to be working well, thanks! – amertkara Sep 10 '15 at 19:19
1  
I had this exact problem and the patch is good – radman 2 days ago

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.