#!/usr/bin/env bash set -e if [ "$1" = "--debug" ]; then export RBENV_DEBUG=1 shift fi if [ -n "$RBENV_DEBUG" ]; then # https://wiki-dev.bash-hackers.org/scripting/debuggingtips#making_xtrace_more_useful export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' set -x fi abort() { { if [ "$#" -eq 0 ]; then cat - else echo "rbenv: $*" fi } >&2 exit 1 } if enable -f "${BASH_SOURCE%/*}"/../libexec/rbenv-realpath.dylib realpath 2>/dev/null; then abs_dirname() { local path path="$(realpath "$1")" echo "${path%/*}" } else [ -z "$RBENV_NATIVE_EXT" ] || abort "failed to load \`realpath' builtin" READLINK=$(type -p greadlink readlink 2>/dev/null | head -n1) [ -n "$READLINK" ] || abort "cannot find readlink - are you missing GNU coreutils?" resolve_link() { $READLINK "$1" } abs_dirname() { local cwd="$PWD" local path="$1" while [ -n "$path" ]; do cd "${path%/*}" local name="${path##*/}" path="$(resolve_link "$name" || true)" done pwd cd "$cwd" } fi if [ -z "${RBENV_ROOT}" ]; then RBENV_ROOT="${HOME}/.rbenv" else RBENV_ROOT="${RBENV_ROOT%/}" fi export RBENV_ROOT if [ -z "${RBENV_DIR}" ]; then RBENV_DIR="$PWD" else [[ $RBENV_DIR == /* ]] || RBENV_DIR="$PWD/$RBENV_DIR" cd "$RBENV_DIR" 2>/dev/null || abort "cannot change working directory to \`$RBENV_DIR'" RBENV_DIR="$PWD" cd "$OLDPWD" fi export RBENV_DIR shopt -s nullglob bin_path="$(abs_dirname "$0")" for plugin_bin in "${RBENV_ROOT}/plugins/"*/bin; do PATH="${plugin_bin}:${PATH}" done export PATH="${bin_path}:${PATH}" RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${RBENV_ROOT}/rbenv.d" if [ "${bin_path%/*}" != "$RBENV_ROOT" ]; then # Add rbenv's own `rbenv.d` unless rbenv was cloned to RBENV_ROOT RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${bin_path%/*}/rbenv.d" fi RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:/usr/local/etc/rbenv.d:/etc/rbenv.d:/usr/lib/rbenv/hooks" for plugin_hook in "${RBENV_ROOT}/plugins/"*/etc/rbenv.d; do RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${plugin_hook}" done RBENV_HOOK_PATH="${RBENV_HOOK_PATH#:}" export RBENV_HOOK_PATH shopt -u nullglob command="$1" case "$command" in "" ) { rbenv---version rbenv-help } | abort ;; -v | --version ) exec rbenv---version ;; -h | --help ) exec rbenv-help ;; * ) command_path="$(command -v "rbenv-$command" || true)" if [ -z "$command_path" ]; then if [ "$command" == "shell" ]; then abort "shell integration not enabled. Run \`rbenv init' for instructions." else abort "no such command \`$command'" fi fi shift 1 if [ "$1" = --help ]; then if [[ "$command" == "sh-"* ]]; then echo "rbenv help \"$command\"" else exec rbenv-help "$command" fi else exec "$command_path" "$@" fi ;; esac