pyenv/libexec/rbenv-init
Kevin Schoedel e390b228c8 Support ksh versions
Korn shell had two major versions: ’88 and ’93. Some systems have ksh
installed under the name `ksh93`. A few systems (maybe only Solaris
now) also have a `ksh88`. A few others use the `pdksh` (roughly ’88)
or `mksh` (roughly ’93) implementations, originated before ksh was
open source.

As far as the (very minor) use in rbenv is concerned, these are all
equivalent. This change accepts all of the above.

Tested with `ksh93`, `pdksh`, and `mksh`.
2023-05-11 12:23:34 -04:00

177 lines
3.3 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 | ksh93 | ksh88 | pdksh | mksh )
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 | ksh93 | ksh88 | pdksh | mksh )
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