A while back I posted about a script I wrote called
You pass it the name of a program and it tells you what version of that program you have installed. Example:
This saves you from having to remember if it’s
java -V or something else (no spoilers).
version now knows how to get the version of 156 different programs (including itself). It has 9 contributors and 15 stars. Not exactly React, but it’s cool to have people contributing.
In the original proof of concept, I was using bash
case statements. In fact, this was the entire first iteration:
! /bin/bash case $1 in java) $1 -version ;; gcc | rustc) $1 --version ;; node | perl | lua) $1 -v ;; python) $1 -V ;; go) $1 version ;; esac
Once I started adding more programs though, it became obvious that this wasn’t going to work. I discovered that bash and zsh support a form of associative arrays. I thought that would be the perfect thing. It would look something like:
declare -A tools
Sadly, these are not supported in bash 3, which is still in use. In fact, my MacBook Pro has bash 3 on it.
Plan C was to fake associative arrays. Essentially, you just make a bunch of variables, one for each tool, with a common prefix:
I just had to do a bit of fancy regex with grep and sed to get the argument from the name of the tool that was passed as an argument. The initial pass with this method was pretty ugly, and I didn’t really understand what I had done. One of the contributors made some nice changes, and this led me to learning a lot more about grep and sed and I was finally able to get rid of grep altogether and do it all in sed. I was pretty happy with that. sed has always seemed like one of those arcane tools that only wizards knew how to use.
I also learned how to make man pages. And I made an install and uninstall script. One of the other contributors has been working on making a snap package, but from what I can tell that’s probably not going to work too sell due to the strict confinement of snaps.
Anyway, I don’t think there’s a whole lot more to be done with the simple tool. Hopefully people will still find new programs to add to it. But I figured it was done enough to slap a 1.0.0 sticker on it.