which is a Go implementation of the UNIX command of the same name.
Its main (and only) advantage over the standard command is its -l flag that makes it resolve symbolic links. This can
be especially useful when using Homebrew.
The executable works exactly like the which command:
which [-as] program ...
In addition, it supports a -l command which makes which resolve symbolic
links before printing the paths.
However, note that this implementation doesn’t support combined flags
(e.g. -al won’t work, you’ll have to use -a -l).
You’ll have to ensure that $GOPATH/bin is at the beginning of your PATH
environnment variable if you want to use this implementation instead of the
original one.
go install github.com/bfontaine/which@1.0.1
$ which vim
/usr/local/bin/vim
$ which -l vim
/usr/local/Cellar/vim/7.4.712_1/bin/vim
$ which -a vim
/usr/local/bin/vim
/usr/bin/vim
which is also usable as a Go library:
package main
import "github.com/bfontaine/which/which"
// get the first executable in $PATH
executable := which.One("vim")
// get all executables in $PATH
executables := which.All("vim")I know it doesn’t really make sense to re-write a simple tool like which, but
I needed the -l option so I wrote this. I use Homebrew on
macOS and it installs binaries in a directory then symlinks them into
/usr/local/bin/, which means it’s not possible to get the original path by
using the original which command alone.