# Contributed by Noah Friedman. # To avoid using a function in bash, you can use the `builtin' or # `command' builtins, but neither guarantees that you use an external # program instead of a bash builtin if there's a builtin by that name. So # this function can be used like `command' except that it guarantees the # program is external by first disabling any builtin by that name. After # the command is done executing, the state of the builtin is restored. function external () { local state="" local exit_status if builtin_p "$1"; then state="builtin" enable -n "$1" fi command "$@" exit_status=$? if [ "$state" = "builtin" ]; then enable "$1" fi return ${exit_status} } # What is does is tell you if a particular keyword is currently enabled as # a shell builtin. It does NOT tell you if invoking that keyword will # necessarily run the builtin. For that, do something like # # test "$(builtin type -type [keyword])" = "builtin" # # Note also, that disabling a builtin with "enable -n" will make builtin_p # return false, since the builtin is no longer available. function builtin_p () { local word set $(builtin type -all -type "$1") for word in "$@" ; do if [ "${word}" = "builtin" ]; then return 0 fi done return 1 }