Bash history search, partial + up-arrow

Open your ~/.inputrc. If you don't have this file, see the end for how to create it. Add these lines:

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

Lines starting with # are comments. I can't remember what is backward and what forward. Experiment with it. Maybe you have to switch backward and forward.

Just re-open possibly open terminal windows for the new behaviour to become effective.


A bit background information:

Bash is using readline to handle the prompt. ~/.inputrc is the configuration file for readline. Note that this will also take effect in other software using the readline library, for example IPython.

Read the bash manual for more information about readline. There you can also find more history related readline commands.

To get the escape codes for the arrow keys you can do the following:

  1. Start cat in a terminal (just cat, no further arguments).
  2. Type keys on keyboard, you will get things like ^[[A for up arrow and ^[[B for down arrow.
  3. Replace ^[ with \e.

If you don't already have a ~/.inputrc file, copy the default settings over, or all the other default key bindings will be overridden:

cp /etc/inputrc ~/.inputrc

or begin your ~/.inputrc file with the following line

$include /etc/inputrc

Create a file named setup_readline.sh with mode 644 in /etc/profile.d/ with following content, login and check you preferred keys:

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

I think is the best way to do this. Mostly if you using configuration management systems such as chef, puppet, etc

And system config still untouched!


Ctrl + R will give you this sort of functionality. Start typing a partial command and it will come up with old ones which you can navigate with the up and down arrows.

More info here.