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.