mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
95 lines
1.4 KiB
Bash
95 lines
1.4 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="$(quiet_safe_cd "${arg0%/*}/" && pwd)"
|
||
|
local path="$(dirbasepath "$dir" "$arg0")"
|
||
|
echo "$path"
|
||
|
exit
|
||
|
fi
|
||
|
exec "$@"
|
||
|
}
|
||
|
|
||
|
try_exec_non_system() {
|
||
|
local file="$1"
|
||
|
shift
|
||
|
|
||
|
IFS=$'\n'
|
||
|
for path in $(type -aP "$file")
|
||
|
do
|
||
|
if [[ "$path" != "/usr/bin/$file" ]]
|
||
|
then
|
||
|
safe_exec "$path" "$@"
|
||
|
fi
|
||
|
done
|
||
|
unset IFS
|
||
|
}
|
||
|
|
||
|
|
||
|
SHIM_FILE="${0##*/}"
|
||
|
SHIM_REAL="$(realpath "$0")"
|
||
|
|
||
|
if [[ "$1" = --homebrew=* ]]
|
||
|
then
|
||
|
HOMEBREW="${1:11}"
|
||
|
shift
|
||
|
fi
|