AgCl
AgCl

Reputation: 253

Matlab-like command history retrieval in unix command line

In Matlab, there is a very nice feature that I like. Suppose I typed the command very-long-command and then a few several commands afterwards. Then later if I need the long command again, I just type very and press the up arrow key, my long command appears. It finds the last command that starts with very. I couldn't do the same in unix command line, when I try to do it, it disregards whatever I typed, and goes back to the last commands in chronological order. Is there a way to do it?

Upvotes: 15

Views: 2915

Answers (3)

Michael Aaron Safyan
Michael Aaron Safyan

Reputation: 95519

You can do the same thing by using "!". For example:

 $ echo "Hello"
 Hello
 $ !echo
 echo "Hello"
 Hello

However, it is generally a bad idea to do this sort of thing (what if the last command did something destructive?). If you expect you will reuse something, then I suggest you create a shell script and save it away somewhere (whenever I plan to reuse something, I create a script in ~/.local/bin).

Upvotes: 3

SCFrench
SCFrench

Reputation: 8374

In bash this functionality is provided by the commands history-search-forward and history-search-backward, which by default are not bound to any keys (see here). If you run

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

it will make up-arrow and down-arrow search backward and forward through the history for the string of characters between the start of the current line and the point. See also this related Stack Overflow question.

Upvotes: 13

Mark Rushakoff
Mark Rushakoff

Reputation: 258278

In bash, hitting ctrl-r will let you do a history search:

$ echo 'something very long'
something very long
$ # blah
$ # many commands later...
(reverse-i-search)`ec': echo 'something very long'

In the above snippet, I hit ctrl-r on the next line after # many commands later..., and then typed ec which brought me back to the echo command. At that point hitting Enter will execute the command.

Upvotes: 8

Related Questions