12

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).

ADDED

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

Lekensteyn
  • 178,446
prosseek
  • 1,905

5 Answers5

14

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.

geirha
  • 47,279
11

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'.
   !string
          Refer to the most recent command starting with string.
   !?string[?]
          Refer to the most recent command containing string.  The trailing ? 
          may be omitted if string is followed immediately by a newline.
   ^string1^string2^
          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.

Lekensteyn
  • 178,446
2

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.

0

My solution is:

  • Edit /etc/inputrc like vi /etc/inputrc
  • Uncomment the following lines
#"\e[5~": history-search-backward
#"\e[6~": history-search-forward
  • And change them to
# Arrow Up
"\e[A": history-search-backward
# Arrow Down
"\e[B": history-search-forward
MonTea
  • 113
0

Had env var HISTSIZE defined with value -1.

unset HISTSIZE 

fixed it