50

When running commands, sometimes maybe you need to run a command with the argument from the last command. How can you do this?

Of course, excepting the use of the arrow keys and Del keys: ...DelDelDel...Del<new_command>.

0

4 Answers 4

66

For example, if you run this command:

mkdir long_path_here/new_dir

most likely you'd want to go in the recently created directory. You can do this using next "shortcuts":

  • cd Esc. - type cd and after press Esc followed by . (not in the same time). If the previous command has no arguments, you will get the previous command itself.
  • cd !* - in this case you will get all arguments from the previuos command. If the previous command has no arguments, you will get nothing.
  • cd Alt+. - type cd and after press Alt and . (in the same time). In fact, using this way and continuing to press . (without to release Alt), you will get the last argument for every command from history. If a command has no arguments, you will get the command itself.

In general: <command> Esc. or <command> !* or <command> Alt+..

1
  • 3
    wow, you saved me hundreds of hours i would have ended up wasting in next couple of years
    – pranavk
    Sep 22, 2017 at 17:56
50

There are a few shortcuts if you want all of the arguments from the previous command, or just the last argument.

  • For all of the arguments: <command> !*
  • For just the last argument: <command> !$

Examples:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

If you want a single argument from a list of arguments from the previous command, you can use <command> !!:<argNumber>

Example:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/
2
  • 3
    You only need one ! in the single arg version, e.g., !:2 . Assuming default bash.
    – belacqua
    Jun 6, 2013 at 23:31
  • 3
    You can also use !^ in place of !:1. Jun 11, 2013 at 15:48
10

Mentioned !* and !$ is a good thing, but when you need to do a little editing readline shortcuts come to help!

For instance, instead of the countless ...DelDelDel...Del you can just press Ctrl-a(jump to the start of the line) Alt+d(delete to the end of the word)

For more info man readline and search for Default key bindings.

6

To take the nth argument from your previous command, type Alt+n+Alt_. For example, after:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

typing echo followed by Alt2Alt_ will give you this at the next prompt:

$ echo 2

The "screenshot" after you've hit Alt2 is:

(arg: 2) echo

You can repeat Alt_ multiple times to get the nth argument of previous commands in succession.

Another useful idea is to define alias r="fc -s". Then, you can do command substitutions:

$ echo 1
1
$ r echo=history
history 1
27755  history 1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .