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