8cb53ba692
The previous version rebound the `hash` and `rehash` builtins to reassing GNU utils when they were called. This didn't take into account that when `$PATH` changes, the commands are rehashed as well. This version adds a preexec hook to reassign the GNU utilities before running any command, if and only if they aren't already reassigned. This is checked by looking at the `whoami` command. Fixes #10535 |
||
---|---|---|
.. | ||
gnu-utils.plugin.zsh | ||
README.md |
gnu-utils plugin
This plugin binds GNU coreutils to their default names, so that you don't have
to call them using their prefixed name, which starts with g
. This is useful
in systems which don't have GNU coreutils installed by default, mainly macOS
or FreeBSD, which use BSD coreutils.
To use it, add gnu-utils
to the plugins array in your zshrc file:
plugins=(... gnu-utils)
The plugin works by changing the path that the command hash points to, so
instead of ls
pointing to /bin/ls
, it points to wherever gls
is
installed.
Since hash -rf
or rehash
refreshes the command hashes, it also wraps
hash
and rehash
so that the coreutils binding is always done again
after calling these two commands.
Look at the source code of the plugin to see which GNU coreutils are tried to rebind. Open an issue if there are some missing.
Other methods
The plugin also documents two other ways to do this:
-
Using a function wrapper, such that, for example, there exists a function named
ls
which callsgls
instead. Since functions have a higher preference than commands, this ends up calling the GNU coreutil. It has also a higher preference over shell builtins (gecho
is called instead of the builtinecho
). -
Using an alias. This has an even higher preference than functions, but they could be overridden because of a user setting.