It only works with the first command in the recorded history, not with any sub shells or chained commands.
#!/usr/bin/env bash
# 1. history and $HISTFILE do not work in scripts. Therefore cat with a direct
# path is needed.
# 2. awk gets the first part of the command name.
# 3. List is then sorted and duplicate entries are removed.
# 4. type -P will expand command names to paths, similar to which. But it will
# also expand aliases and functions.
# 5. Final output is then sorted again.
type -P $(cat ~/.bash_history | awk '{print $1}' | sort | uniq) | sort
After reading a blog post, I had this script in mind to see if its possible. This is just for fun and I don’t have an actual use for it. Maybe some parts of it might inspire you to do something too. So have fun.
Edit 1:
After some suggestions from the comments, here is a little shorter version. sort | uniq
can be replaced by sort -u
, as the output of them should be identical in this case (in certain circumstances they can have different effect!). Also someone pointed out my useless cat
, as the file can be used directly with awk
. And for good reason. :D Enjoy, and thanks for all.
type -P $(awk '{print $1}' ~/.bash_history | sort -u) | sort
I still have no real use case for this one liner, its mainly just for fun.
Silly me misunderstood the intention of the script. I imagined it lists the programmatic paths the program can take, like all the decision in the program. :)