51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								# 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
							 | 
						||
| 
								 | 
							
								}
							 |