1# Contributed by Noah Friedman. 2 3# To avoid using a function in bash, you can use the `builtin' or 4# `command' builtins, but neither guarantees that you use an external 5# program instead of a bash builtin if there's a builtin by that name. So 6# this function can be used like `command' except that it guarantees the 7# program is external by first disabling any builtin by that name. After 8# the command is done executing, the state of the builtin is restored. 9function external () 10{ 11 local state="" 12 local exit_status 13 14 if builtin_p "$1"; then 15 state="builtin" 16 enable -n "$1" 17 fi 18 19 command "$@" 20 exit_status=$? 21 22 if [ "$state" = "builtin" ]; then 23 enable "$1" 24 fi 25 26 return ${exit_status} 27} 28 29# What is does is tell you if a particular keyword is currently enabled as 30# a shell builtin. It does NOT tell you if invoking that keyword will 31# necessarily run the builtin. For that, do something like 32# 33# test "$(builtin type -type [keyword])" = "builtin" 34# 35# Note also, that disabling a builtin with "enable -n" will make builtin_p 36# return false, since the builtin is no longer available. 37function builtin_p () 38{ 39 local word 40 41 set $(builtin type -all -type "$1") 42 43 for word in "$@" ; do 44 if [ "${word}" = "builtin" ]; then 45 return 0 46 fi 47 done 48 49 return 1 50} 51