≡ Menu

Bash: Reissue And Repeat A Long Command Without Retyping It on a Linux, OS X & Unix

I‘m a new Ubuntu Linux user. In Linux, Apple OS X or Unix-like systems, how do I reissue or repeat a long command without retying it?

You need to use the history command to display or manipulate the history list on a Linux or Unix-like systems. This command displays the list of commands previously typed with line numbers, prefixing each modified entry with a *.


The bash shell supports a history expansion feature that is similar to the history expansion in csh.

Display list of previously typed commands

Simply type the following command:

history
history 10
history | less
history | grep 'command-name-here'

Sample outputs:

Fig.01: Bash history command output

Fig.01: Bash history command output

How do I reissue a long command without retyping it?

To reissue a command in bash/csh/tcsh/zsh shell, type ! the exclamation point followed by the number of the command you would like to run or repeat. For example, if you would like to reissue command ‘ssh root@v.b2’ from the above output i.e. command # 80, type:

!80

Scrolling through the command line history

You can also scroll through the command line history simply by using the [up] and [down] arrow keys too.

Searching the command line history

Press [CTRL-r] from the shell prompt to search backwards through history buffer or file for a command. After pressing [CTRL-r] just type first few command letter such as ssh:

(reverse-i-search)`ssh ': ssh -X vivek@nas01

To search all ssh related commands press [CTRL-r] again:

Gif.01: Bash/tcsh/zsh: Command search demo

Gif.01: Bash/tcsh/zsh: Command search demo

To repeat last command just type !! at a shell prompt

Say you type a long command:

ssh -X -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /Users/veryv/.ssh/google_compute_engine -A -p 22 veryv@173.255.113.19 --

To repeat the same last command again, just type !!:

!!

Or you can also refer to the previous command using:

!-1

To repeat to the most recent command starting with word ‘ssh’ type:

!ssh

For more info see man pages – bash(1), zsh(1), tcsh(1)

Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:



{ 7 comments… add one }
  • Irfan February 2, 2015, 10:28 pm

    Many thanks for sharing the information.

  • Jeremy Boden February 3, 2015, 2:25 am

    Note that previously used commands can be accessed in command entry or terminal windows across reboots.

  • Jules February 3, 2015, 2:59 pm

    Sometimes is is dangerous to just use the exclamation point with the first letter. It may pull up and execute a command you did not intend. To avoid this use the print option (‘:p’) after. For example to just print out the last command beginning with r, but not execute it you would enter the following:

        !r:p

    Bash will print out the command and make it the final command in your history, for example:

       rm *xml

    Now you can press the up arrow and execute that command or edit it and then execute it by pressing the Enter key.

  • Chris F.A. Johnson February 5, 2015, 9:28 pm

    It is dangerous to use a printable character for anything other than self-insert.

  • DePe February 28, 2015, 3:22 pm

    Make a text file of the script, and drag and drop it to the terminal, and run it. No Idea how to do it though

  • Wesley Steinbrink July 16, 2015, 5:24 pm

    I really like Ctrl-r. It is useful for accessing a command by part of the command in the middle also. You can keep adding letters to your search or doing Ctrl-r to cycle through what matches that that you already have input. When you are satisfied that it is a command you want to run – then hit enter. If it is almost the command that you want to run, but requires some more modification, then hit .
    Ctrl-r can also be used on an existing line to go back to a character in that line. To go back to the closest space – Ctrl-r and
    For more control within an existing line, use Ctrl-Alt-] to move backwards
    For more control within an existing line, use Ctrl-] to move forwards
    For these can be replaced by any character.

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">


   Tagged with: , , ,