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>
.
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+..
There are a few shortcuts if you want all of the arguments from the previous command, or just the last argument.
<command> !*
<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/
!
in the single arg version, e.g., !:2
. Assuming default bash.
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
.
To take the n
th 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 n
th 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