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.

  • aname
    link
    fedilink
    31 month ago

    Can this one liner determine if program halts too?

    • @[email protected]OP
      link
      fedilink
      31 month ago

      I’m actually not sure what you mean by that. This script will only list the programs you used in the terminal. It prints the fullpath of each command. That’s all it does.

      Do you want know if a program is currently running?

      • aname
        link
        fedilink
        31 month ago

        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. :)