<p>In the GNOME Terminal, Bash does smart auto-completion. For example</p>

<pre><code>apt-get in&lt;TAB&gt;
</code></pre>

<p>becomes</p>

<pre><code>apt-get install
</code></pre>

<p>In Emacs shell-mode, this auto-completion doesn't work, even after I explicitly source <code>/etc/bash_completion</code>. The above example sticks as <code>in</code> or auto-completes with a filename in the current directory rather than a valid <code>apt-get</code> command option. Presumably, this is because Emacs is intercepting the Tab key-press. How do I enable smart auto-completion in <code>shell-mode</code>?</p>

I don't know the answer to this. But the reason that it doesn't work as you expect is probably because the completion in emacs shells is handled by emacs internally (by the comint-dynamic-complete function), and doesn't have those smart completion functions built-in.
I'm afraid it is not an easy thing to fix.
Edit: njsf's suggestion of using term-mode is probably as good as it gets. Start it with
```
M-x term
```
It is included in the standard emacs distribution (and in emacs21-common or emacs22-common on Ubuntu and Debian at least).