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/[email protected]
$ 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.