What setup do I need to use up-arrow to run previous command? With Mac, I can use up-arrow to rerun the command that I just run, but it doesn't seem to work with my bash shell.

I use 8.04 (I can't use the newest distribution because of some compiler version issues).


I didn't change anything as it's a fresh install with VMWare Fusion on Mac.

  • 3
    In the default configuration, up arrow works perfectly: have you modified somethings? – enzotib Apr 11 '11 at 16:15
  • as @enzotib says bash will do this by default, but some others, eg sh will not! – Rory Alsop Apr 11 '11 at 19:13

Make sure that your history is enabled. You can check the current status by running:

set -o

The output should contain (note the history on line):

histexpand      on
history         on
ignoreeof       off

If this is not enabled, you need to run set -o history. To make this change persistent, you need to append it to ~/.bashrc:

set -o history

If you want to run the previous command, you can run the next command as well:


From Bash manual page:

Event Designators
   An event designator is a reference to a command line entry in the history list.

   !      Start a history substitution, except when followed by a blank, newline,
          carriage return, = or ( (when the extglob shell option  is
          enabled using the shopt builtin).
   !n     Refer to command line n.
   !-n    Refer to the current command line minus n.
   !!     Refer to the previous command.  This is a synonym for `!-1'.
          Refer to the most recent command starting with string.
          Refer to the most recent command containing string.  The trailing ? 
          may be omitted if string is followed immediately by a newline.
          Quick  substitution.  Repeat the last command, replacing string1 with
          string2.  Equivalent to ``!!:s/string1/string2/'' (see Modifiers below).
   !#     The entire command line typed so far.

If you're using Bash, you can use the default shortcuts for navigating through the history as well:

  • Ctrl + P: Previous command
  • Ctrl + N: Next command

    Commands for Manipulating the History previous-history (C-p) Fetch the previous command from the history list, moving back in the list. next-history (C-n) Fetch the next command from the history list, moving forward in the list.

  • 1
    I checked the setup is correct, but the up-arrow key doesn't work. However, I can use Ctrl-P/N for getting the same result. Thanks. – prosseek Apr 11 '11 at 17:45
  • @prosseek In that case, have you changed /etc/inputrc or ~/.inputrc? Also, what escape sequence does the up and down arrow produce in the terminal you're using? To check, run cat, then on the empty line, hit uparrow and downarrow, then Ctrl+C to exit cat. Here it produces ^[[A^[[B. – geirha Apr 11 '11 at 18:54
  • @geirha : I don't have the ~/.inputrc file, and I didn't change anything /etc/inputrc. And for the escape sequence, I got nothing seen in the screen. – prosseek Apr 11 '11 at 21:06
  • @prosseek Then it sounds like the arrow keys never reach the terminal at all. Perhaps the VMWare interface is filtering them out or something. – geirha Apr 11 '11 at 22:17

Make sure you are actually using bash. A common gotcha is creating a new user with useradd instead of adduser or the Users and groups (GUI) application. With the former, the default shell set is /bin/sh. Run chsh (change shell) to make sure it's set to /bin/bash.


In terminal enter:

gedit  ~/.inputrc

Then copy paste and save:

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

From now on in terminal you can do incremental search, All you need to do to find a previous command is to enter say the first two or three letters and upward arrow will take you there quickly.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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