Bash: Reusing previous commands
If we want to list the history of all the commands we’ve entered in a shell session then the following command does the trick:
> history ... 761 sudo port search pdfinfo 762 to_ipad andersen-phd-thesis.pdf 763 vi ~/.bash_profile 764 source ~/.bash_profile 765 to_ipad andersen-phd-thesis.pdf 766 to_ipad spotify-p2p10.pdf 767 mkdir LinearAlgebra
If we want to execute any of those commands again then we can do that by entering ![numberOfCommand. For example, to execute the last command on that list we’d do this:
> !767 mkdir LinearAlgebra mkdir: LinearAlgebra: File exists
We can also search the history and execute the last command that matches the search by doing the following:
> !mk mkdir LinearAlgebra mkdir: LinearAlgebra: File exists
A safer way to do this would be to suffix that with :p so the command gets printed to stdout rather than executed:
> !mk:p mkdir LinearAlgebra
A fairly common use case that I’ve come across is to search for a file and then once you’ve found it open it in a text editor.
We can do this by using the !! command which repeats the previously executed command:
> find . -iname "someFile.txt" > vi `!!`
We can achieve the same thing by wrapping '!!' inside '$()' as well:
> find . -iname "someFile.txt" > vi $(!!)
Sam Rowe has a cool post where he goes into this stuff in even more detail.
I’m sure there are more tricks that I haven’t learnt yet so please let me know if you know some!