Home Linux Tips & Tricks Different Ways To Repeat Your Last Command In Linux

Different Ways To Repeat Your Last Command In Linux

By sk
Published: Last Updated on 27,297 Views

Today, I will be teaching you how to repeat your last command in Linux. You don't have to re-type the previously executed commands in your Shell. Of course, we use the UP arrow key to select the last executed commands and hit ENTER to execute them. However, there are also other a few ways to do this.  There could be many ways to repeat the last commands in Unix-like systems, but these are the only ways I am aware of now. All these commands were tested in my Arch Linux and Ubuntu desktop with BASH shell.

A word of caution: When you try the following methods, the previously executed commands will run immediately. Just make sure your last command wasn't any harmful like formatting a partition or deleting files, folders or any other important data.

Repeat last command in Linux

Let us run a few commands.

$ ls -l
$ pwd
$ date
$ uname -r

As I mentioned earlier, we can execute the last command by simply pressing the UP arrow and hit ENTER key. This is the most commonly used way by many users to execute the previous command. This method will work on all SHELL, regardless of the Linux distribution you use.

However, like I said already, there are a few other methods to do this.

Now, let me show you how to execute the last command with some practical examples.

Method 1 - Using exclamation marks

To execute any last executed command, just type double exclamation marks, and hit ENTER:

$ !!

This will execute the last command. Sample output would be:

uname -r
5.3.0-40-generic

Add sudo in-front of !! to execute the last command as root user like below.

$ sudo !!

You can also use the following to execute the previous command as sudo user:

$ su -c "!!"

Sample output:

su -c "uname -r"
Password: 
5.3.0-40-generic

Cool, isn't it? You don't need to type the last command completely. It could be useful when you’ve already executed a very long command, and don't want to re-type the same command again.

Method 2 - Repeat N-th command

You might have run so many commands, and want to repeat a specific command. What will you do? Simple! You can do this by typing a specific word of the previous command.

To repeat previous command that starts with a specific word/letter, for example un, just type:

$ !un

The above command will execute last command that starts with the letters "un".

Sample output:

!un
uname -r
5.3.0-40-generic

As you see in the above example, you don't need to type the whole command (i.e uname -r). Instead, just type a few letters of the command, and any previous command that contains words will run.

Also, If you know the full command name, just type it like below:

$ !uname

It will execute the last command.

What if you don't want to repeat the last command, but just display it. Sometimes, you don't want to run a command, but just retrieve it from the history. If so, find the prefix number of the command you want to run:

$ history | grep -i "source"

Sample output:

1664 source googler_at
1678 source googler_at 
1685 source ~/.bashrc
2037 history | grep -i "source"

Let us say you want to retrieve the 1685th command, but don't want to run it immediately, add :p next to the command like below.

$ !1685:p

This will display 1685th command from the history, but won’t execute it.

Another way to do this is by searching your command line history using CTRL+R. Press CTRL+R key to search through the command line history. I personally prefer this method. It searches history interactively which I think feels safer than executing commands blindly from the BASH history.

Have a look at the following example. In the following example, I searched for "ost", which displayed the last command “sudo netctl restart ostechnixjio” in the history that contained the word "ost". Then, I hit ENTER to execute the command immediately or right arrow key complete the command and hit ENTER key to execute it.

(reverse-i-search)`ost': sudo netctl restart ostechnixjio
Search bash history using reverse search
Search bash history

Just in case, you want to edit/modify the last command before executing it, just press the left arrow key, then edit the last command and hit ENTER to execute it. Some commands may start with same letters. In such cases, keep hitting the CTRL+R key to bring back the command you wanted to run.

Method 4 - Use hyphen symbol with command prefix numbers

Here is yet another way to run the previous command.

$ !-1

Sample output:

uname -r
5.3.0-40-generic

Similarly, !-2 will run the second last command, !-3 will run the third last command, and so on.

Method 5 - Using CTRL+p and CTRL+o

I don't want to type any command manually. Is there any way to repeat a last command by simply pressing a particular key(s) in my Keyboard? Yes, of course!

Press CTRL+P to switch to the last command, and then press CTRL+O to execute it. This will do the wonder. No configuration needed! You can use CTRL+O as many times as you want to keep re-executing the last commands.

Method 6 - Using fc command

This is another way to repeat the last executed command. The fc command is used to list, edit and re-run the previously entered command.

To repeat the last command using fc, simply run:

$ fc -s

Sample output:

uname -r
5.3.0-40-generic

Method 7 - Using ALT+period key

As one of our reader said in the comment section, we can also use ALT+. keys (press ALT+period) to retrieve the last command without running it. However, there is one limitation. Hitting ALT+. will only retrieve the last argument in the command. For example, if your previous command is "uname -r", it will only bring back the -r argument, but not the entire command.

And, that's all. You know now how to repeat your last command without typing it in the Terminal. If you want to view the output of your last commands without actually having to retype them, these methods will help.

If you know any other methods, please let me know in the comment section below. I will check and update the guide accordingly.

You knew now how to repeat a previously executed command. How do you repeat a Linux command or program until it succeeds? Well, that's easy! Refer the following guide for more details.

Hope this helps.

You May Also Like

14 comments

ashley_101 August 31, 2018 - 9:39 pm

Thanks. Good information.
However, it’s mentioned at the beginning that arrow UP key will work ON ALL. it doesn’t work for me. I get this : ^[

Reply
Tiago July 17, 2019 - 6:27 am

thank you!

Reply
Fodil October 14, 2019 - 11:36 pm

Many thanks

Reply
Leandro Cadete January 26, 2020 - 10:16 pm

Very cool!

Reply
Fabian March 10, 2020 - 5:32 pm

Thanks for the tip with the exclamation mark. A nice workflow is this:
history | grep -i “bash”
Output:
[…]
1223 bash -c “sudo su”
1360 nano ~/.bashrc
1432 history | grep bash
Then:
!1360
That executes “nano ~/.bashrc” again.

Reply
sk March 10, 2020 - 6:12 pm

Thanks for the tip Fabian.

Reply
sk March 10, 2020 - 6:18 pm

Here is another tip based on your suggestion. If you don’t want to automatically run a n’th command from history,add :p like below.

$ !1360:p

This will display 1360th command from the history, but won’t execute it.

Reply
Chiti March 11, 2020 - 10:12 am

Good information!!

Reply
Jalal March 11, 2020 - 12:07 pm

Hi,
Thanks a lot

Reply
K3N March 12, 2020 - 10:59 am

You can also hit ALT dot (Alt+.) to get last command wo/ running it

Reply
sk March 12, 2020 - 1:16 pm

Yes, but it will only retrieve the last argument in the command. For example, if your previous command is uname -r, hitting ALT+. will bring the -r, but not the entire command.

Reply
fuseteam June 17, 2020 - 10:39 pm

doesn’t work for me, perhaps because alt is sending escape aswell

Reply
charle June 19, 2020 - 6:12 pm

Thanks

Reply
fuseteam June 30, 2020 - 5:04 pm

here’s an sequel to your tip
!1360 will not only print the 1360th command it will also add it to your bash history

Reply

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More