1
0
Fork 0
mirror of https://github.com/notwa/rc synced 2024-05-18 09:53:22 -07:00

support hyphens in command names passed to has

This commit is contained in:
Connor Olding 2021-10-13 19:58:52 -07:00
parent fdcae6182f
commit e522d065bf
2 changed files with 24 additions and 12 deletions

View File

@ -5,11 +5,15 @@
# {{{1 utilities
has() ( # hardcoded here for convenience. refer to ~/sh/has for documentation.
if [ "${1:--}" = "${1#*[!A-Za-z_]}" ]; then
alias "$1"=
unalias "$1"
eval "$1() (:)"
unset -f "$1"
if [ "${1:-/}" = "${1#*[!A-Za-z_-]}" ]; then
if [ "$FANCY" = 0 ] || [ "${1:-/}" = "${1#-}" ]; then
alias "$1"=
unalias "$1"
fi
if [ "$FANCY" = 1 ] || [ "${1:-/}" = "${1#*-}" ]; then
eval "$1() (:)"
unset -f "$1"
fi
fi
which -- "$1" >/dev/null 2>&1 && which -- "$1"
)

22
sh/has
View File

@ -8,13 +8,21 @@ has() ( ### @- print the result of `which` if the program is found, else simply
### ```
### export SOLVER="$(has kissat || has picosat || has cadical || has minisat)"
### ```
if [ "${1:--}" = "${1#*[!A-Za-z_]}" ]; then # valid alias name?
# forcefully unalias it (regardless of if it even was an alias)
alias "$1"=
unalias "$1"
# forcefully unset it (regardless of if it even was a function)
eval "$1() (:)"
unset -f "$1"
fancy=0
[ -z "$ZSH_VERSION" ] && [ -z "$BASH_VERSION" ] || fancy=1
if [ "${1:-/}" = "${1#*[!A-Za-z_-]}" ]; then # has a simple name?
if [ $fancy = 0 ] || [ "${1:-/}" = "${1#-}" ]; then
# only ash and dash support aliases beginning with hyphens.
# forcefully unalias it (regardless of if it even was an alias):
alias "$1"=
unalias "$1"
fi
if [ $fancy = 1 ] || [ "${1:-/}" = "${1#*-}" ]; then
# only bash and zsh support function names containing hyphens.
# forcefully unset it (regardless of if it even was a function):
eval "$1() (:)"
unset -f "$1"
fi
fi
which -- "$1" >/dev/null 2>&1 && which -- "$1"
) # this uses parentheses instead of braces so that the function is always run