pyenv/libexec/rbenv-init
Mislav Marohnić 41580b69db
Merge pull request #1448 from rbenv/command-to-type-P
Ignore shell builtins and functions when looking up commands in PATH
2022-10-09 14:49:32 +02:00

177 lines
3.2 KiB
Bash
Executable file

#!/usr/bin/env bash
# Summary: Configure the shell environment for rbenv
# Usage: eval "$(rbenv init - [--no-rehash] [<shell>])"
set -e
[ -n "$RBENV_DEBUG" ] && set -x
# Provide rbenv completions
if [ "$1" = "--complete" ]; then
echo -
echo --no-rehash
echo bash
echo fish
echo ksh
echo zsh
exit
fi
print=""
no_rehash=""
for args in "$@"
do
if [ "$args" = "-" ]; then
print=1
shift
fi
if [ "$args" = "--no-rehash" ]; then
no_rehash=1
shift
fi
done
shell="$1"
if [ -z "$shell" ]; then
shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)"
shell="${shell%% *}"
shell="${shell##-}"
shell="${shell:-$SHELL}"
shell="${shell##*/}"
shell="${shell%%-*}"
fi
root="${BASH_SOURCE:-$0}"
root="${root%/*}"
root="${root%/*}"
rbenv_in_path=true
if [ -n "$RBENV_ORIG_PATH" ]; then
PATH="$RBENV_ORIG_PATH" type -P rbenv >/dev/null || rbenv_in_path=""
fi
if [ -z "$print" ]; then
case "$shell" in
bash )
if [ -f "${HOME}/.bashrc" ] && [ ! -f "${HOME}/.bash_profile" ]; then
profile='~/.bashrc'
else
profile='~/.bash_profile'
fi
;;
zsh )
profile='~/.zshrc'
;;
ksh )
profile='~/.profile'
;;
fish )
profile='~/.config/fish/config.fish'
;;
* )
profile='your profile'
;;
esac
rbenv_command=rbenv
if [ -z "$rbenv_in_path" ]; then
rbenv_command="$root/bin/rbenv"
rbenv_command="${rbenv_command/$HOME\//~/}"
fi
{ echo "# Please add the following line to your \`${profile}' file,"
echo "# then restart your terminal."
echo
[ -t 2 ] && printf '\e[33;1m'
case "$shell" in
fish )
printf 'status --is-interactive; and %s init - fish | source' "$rbenv_command"
;;
* )
# shellcheck disable=SC2016
printf 'eval "$(%s init - %s)"' "$rbenv_command" "$shell"
;;
esac
[ -t 2 ] && printf '\e[m'
echo
echo
} >&2
exit 1
fi
mkdir -p "${RBENV_ROOT}/"{shims,versions}
case "$shell" in
fish )
[ -n "$rbenv_in_path" ] || printf "set -gx PATH '%s/bin' \$PATH\n" "$root"
printf "set -gx PATH '%s/shims' \$PATH\n" "$RBENV_ROOT"
printf 'set -gx RBENV_SHELL %s\n' "$shell"
;;
* )
# shellcheck disable=SC2016
[ -n "$rbenv_in_path" ] || printf 'export PATH="%s/bin:${PATH}"\n' "$root"
# shellcheck disable=SC2016
printf 'export PATH="%s/shims:${PATH}"\n' "$RBENV_ROOT"
printf 'export RBENV_SHELL=%s\n' "$shell"
completion="${root}/completions/rbenv.${shell}"
if [ -r "$completion" ]; then
printf "source '%s'\n" "$completion"
fi
;;
esac
if [ -z "$no_rehash" ]; then
echo 'command rbenv rehash 2>/dev/null'
fi
IFS=$'\n' read -d '' -r -a commands <<<"$(rbenv-commands --sh)" || true
case "$shell" in
fish )
cat <<EOS
function rbenv
set command \$argv[1]
set -e argv[1]
switch "\$command"
case ${commands[*]}
rbenv "sh-\$command" \$argv|source
case '*'
command rbenv "\$command" \$argv
end
end
EOS
;;
ksh )
cat <<EOS
function rbenv {
typeset command
EOS
;;
* )
cat <<EOS
rbenv() {
local command
EOS
;;
esac
if [ "$shell" != "fish" ]; then
IFS="|"
cat <<EOS
command="\${1:-}"
if [ "\$#" -gt 0 ]; then
shift
fi
case "\$command" in
${commands[*]})
eval "\$(rbenv "sh-\$command" "\$@")";;
*)
command rbenv "\$command" "\$@";;
esac
}
EOS
fi