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

last updated in Categories , , , , , , ,

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 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:


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@ --

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


Or you can also refer to the previous command using:


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


For more info see man pages – tcsh(1)

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

7 comment

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

  2. 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:


    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.

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

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

    Still, have a question? Get help on our forum!