If you set environment variables like your EDITOR
in your .bashrc
file
that refer to commands that you expect to be available on the system, it’s
prudent to check that an appropriate command actually exists before making the
setting.
A common way of approaching this is using which, in a syntax similar to the
below, which sets EDITOR
to the first executable instance of vi
found in
PATH
, or blank if not found:
EDITOR=$(which vi)
Because the behaviour of which
can be unexpected, it’s better practice
to use one of Bash’s builtins to do this, either command
, type
, or hash
.
I prefer using hash
, which searches PATH
for a command of the given name,
and loads it into Bash’s command hash table if found. An implementation like
the below works well:
if hash vi 2>/dev/null; then
export EDITOR=vi
fi
This ignores any error output from the hash call by redirecting it to the
null device, and only defines the value for EDITOR
if a matching command is
found.
You can compact this syntax into one line:
hash vi 2>/dev/null && export EDITOR=vi
Thanks to commenter Yu-Jie Lin for pointing out the above abbreviation.