List all existing program paths from your Bash's history. (Bash One Liner)
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. 😁 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.
Questa voce è stata modificata (3 mesi fa)
hexagonwin
in reply to thingsiplay • • •thingsiplay
in reply to hexagonwin • • •hexagonwin
in reply to thingsiplay • • •non_burglar
in reply to thingsiplay • • •I agree they aren't the same, especially if you need uniq to count things.
However, be aware that pipes can be a real problem in scripts because of globbing and expansion.
just_another_person
in reply to thingsiplay • • •aname
in reply to thingsiplay • • •thingsiplay
in reply to aname • • •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
in reply to thingsiplay • • •TechieDamien
in reply to aname • • •aname
in reply to TechieDamien • • •pemptago
in reply to thingsiplay • • •As I've been working on an install script for making my setup more portable, this is handy and timely. Thanks for sharing!
PS I hate to be the UUOC person. I'm sure you're already aware and it was a deliberate choice.
Unix utility that concatenates and lists files
Contributors to Wikimedia projects (Wikimedia Foundation, Inc.)thingsiplay
in reply to pemptago • • •I wish it was. I honestly forgot. yeah, shame on me. 😁 Before this, at the position of cat there was actually a different command, which I replaced with this. And I didn't think of adding the file to awk instead. I'll update the line with this suggestion and a suggestion from someone else.