How to copy last command in bash
Often I find myself trying out a command in the shell in a few different ways.
Then when I finally get it right, I want to copy what I ran, sometimes to share
it with someone or often just to jot it down in my notes.
Sometimes that's not as easy as I would want. That might be because the command
printed a lot of things to the screen, so the command is far away or even lost.
Other times it's just because it's just because I don't want to use the mouse.
One command
I wrote a little bash function to copy the last command to the clipboard. Note
that this is only tested on OSX, so it might not work on other operating
systems, particularly if the don't have
pbcopy
built in.function copy-last {history | tail -n 1 | awk '{$1=""; print $0}' | pbcopy}
How it works
This command has four parts, the output of each is piped into the next as input:
history
list all commands in the history.tail -n 1
returns the last line of the input it receives.awk '{$1=""; print $0}'
is the tricky part of this function. The output of history
returns
is many lines of two columns each. The first is an id, and the second is a
command. Here awk
ignores the first column and prints whatever is left over.
At least that is my understanding, the original article is
here.pbcopy
takes whatever was passed as its input and copies it to the system
clipboard.Alternative
Bash has a few other shorthands that I know of to get the last command. The ones
I know are
!?
, !!
, and !-1
. I suspect that if you somehow put those inside
of an echo command, you could then pipe the result into pbcopy
. I wasn't able
to get something like that working though, and this does the trick 😅 Feel free
to let me know if you find a solution though!