#!/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 [ -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 [ -n "$RBENV_ORIG_PATH" ] || export RBENV_ORIG_PATH="$PATH" shopt -s nullglob rbenv_bin="${BASH_SOURCE:-$0}" if [ -L "$rbenv_bin" ]; then # resolve rbenv symlink to find out where the actual libexec directory is if readlink="$(type -P greadlink)" || readlink="$(type -P readlink)"; then resolved="$("$readlink" "$rbenv_bin" 2>/dev/null)" if [[ $resolved == /* ]]; then libexec_dir="${resolved%/*}" else libexec_dir="$(cd "${rbenv_bin%/*}/${resolved%/*}" && pwd)" fi else # no readlink available; assume rbenv project layout libexec_dir="${rbenv_bin%/*}" if [[ $libexec_dir == */* ]]; then libexec_dir="${libexec_dir%/*}/libexec" else libexec_dir="${PWD}/libexec" fi fi else libexec_dir="${rbenv_bin%/*}" [[ $libexec_dir != "." ]] || libexec_dir="$PWD" fi for plugin_bin in "${RBENV_ROOT}/plugins/"*/bin; do PATH="${plugin_bin}:${PATH}" done export PATH="${libexec_dir}:${PATH}" RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${RBENV_ROOT}/rbenv.d" if [ ! "${libexec_dir%/*}"/rbenv.d -ef "$RBENV_ROOT"/rbenv.d ]; then # Add rbenv's own `rbenv.d` unless rbenv was cloned to RBENV_ROOT RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${libexec_dir%/*}/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