98 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| set +o posix
 | |
| 
 | |
| quiet_safe_cd() {
 | |
|   cd "$1" &>/dev/null || {
 | |
|     echo "Error: failed to cd to $1" >&2
 | |
|     exit 1
 | |
|   }
 | |
| }
 | |
| 
 | |
| absdir() {
 | |
|   quiet_safe_cd "${1%/*}/" && pwd -P
 | |
| }
 | |
| 
 | |
| dirbasepath() {
 | |
|   local dir="$1"
 | |
|   local base="${2##*/}"
 | |
|   echo "${dir}/${base}"
 | |
| }
 | |
| 
 | |
| realpath() {
 | |
|   local path="$1"
 | |
|   local dir
 | |
|   local dest
 | |
| 
 | |
|   dir="$(absdir "${path}")"
 | |
|   path="$(dirbasepath "${dir}" "${path}")"
 | |
| 
 | |
|   while [[ -L "${path}" ]]
 | |
|   do
 | |
|     dest="$(readlink "${path}")"
 | |
|     if [[ "${dest}" == "/"* ]]
 | |
|     then
 | |
|       path="${dest}"
 | |
|     else
 | |
|       path="${dir}/${dest}"
 | |
|     fi
 | |
|     dir="$(absdir "${path}")"
 | |
|     path="$(dirbasepath "${dir}" "${path}")"
 | |
|   done
 | |
| 
 | |
|   echo "${path}"
 | |
| }
 | |
| 
 | |
| executable() {
 | |
|   local file="$1"
 | |
|   [[ -f "${file}" && -x "${file}" ]]
 | |
| }
 | |
| 
 | |
| lowercase() {
 | |
|   echo "$1" | tr "[:upper:]" "[:lower:]"
 | |
| }
 | |
| 
 | |
| safe_exec() {
 | |
|   local arg0="$1"
 | |
|   if ! executable "${arg0}"
 | |
|   then
 | |
|     return
 | |
|   fi
 | |
|   # prevent fork-bombs
 | |
|   if [[ "$(lowercase "${arg0}")" == "${SHIM_FILE}" || "$(realpath "${arg0}")" == "${SHIM_REAL}" ]]
 | |
|   then
 | |
|     return
 | |
|   fi
 | |
|   if [[ "${HOMEBREW}" == "print-path" ]]
 | |
|   then
 | |
|     local dir
 | |
|     dir="$(quiet_safe_cd "${arg0%/*}/" && pwd)"
 | |
|     local path
 | |
|     path="$(dirbasepath "${dir}" "${arg0}")"
 | |
|     echo "${path}"
 | |
|     exit
 | |
|   fi
 | |
|   exec "$@"
 | |
| }
 | |
| 
 | |
| try_exec_non_system() {
 | |
|   local file="$1"
 | |
|   shift
 | |
| 
 | |
|   local path
 | |
|   while read -r path
 | |
|   do
 | |
|     if [[ "${path}" != "/usr/bin/${file}" ]]
 | |
|     then
 | |
|       safe_exec "${path}" "$@"
 | |
|     fi
 | |
|   done < <(type -aP "${file}")
 | |
| }
 | |
| 
 | |
| SHIM_FILE="${0##*/}"
 | |
| SHIM_REAL="$(realpath "$0")"
 | |
| 
 | |
| if [[ "$1" == "--homebrew="* ]]
 | |
| then
 | |
|   HOMEBREW="${1:11}"
 | |
|   shift
 | |
| fi
 | 
