123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- #!/usr/bin/env bash
- # rvm : Ruby enVironment Manager
- # https://rvm.io
- # https://github.com/rvm/rvm
- # partial duplication marker dkjnkjvnckbjncvbkjnvkj
- # prevent from loading in sh shells
- if
- builtin test -n "${BASH_VERSION:-}" -o -n "${ZSH_VERSION:-}" -o -n "${KSH_VERSION:-}"
- then
- case "`uname`" in
- (CYGWIN*|MINGW*)
- __shell_name="`\command \ps -p $$ | \command \awk 'END {print $NF}'` 2>/dev/null" ;;
- (SunOS)
- __shell_name="`\command \ps -p $$ -o comm=`" ;;
- (Linux)
- case "$(command uname -o)" in
- (Android)
- __shell_name="gawk 'BEGIN{RS=\"\"}; NR==1{print; exit}' /proc/$$/cmdline | tr - '\0'" ;;
- (*)
- __shell_name="`\command \ps -p $$ -o ucomm=`" ;;
- esac ;;
- (*)
- __shell_name="`\command \ps -p $$ -o ucomm=`" ;;
- esac
- case "$__shell_name" in
- (""|dash|sh|ksh|*/dash|*/sh|*/ksh) return 0 ;; # silently stop in sh shells
- esac
- unset __shell_name
- else
- return 0
- fi
- # also duplicated in scripts/base
- __rvm_has_opt()
- {
- if # pre-gnu
- [[ -n "${ZSH_VERSION:-}" ]]
- then
- setopt | GREP_OPTIONS="" \command \grep "^${1:-}$" >/dev/null 2>&1 || return $?
- elif # mksh
- [[ -n "${KSH_VERSION:-}" ]]
- then
- set +o | GREP_OPTIONS="" \command \grep "-o ${1:-}$" >/dev/null 2>&1 || return $?
- elif # bash
- [[ -n "${BASH_VERSION:-}" ]]
- then
- [[ ":${SHELLOPTS:-}:" == *":${1:-}:"* ]] || return $?
- else # what is this?!
- return 1
- fi
- }
- # Do not allow sourcing RVM in `sh` - it's not supported
- # return 0 to exit from sourcing this script without breaking sh
- if __rvm_has_opt "posix"
- then return 0
- fi
- # TODO: Alter the variable names to make sense
- \export HOME rvm_prefix rvm_user_install_flag rvm_path
- HOME="${HOME%%+(\/)}" # Remove trailing slashes if they exist on HOME
- [[ -n "${rvm_stored_umask:-}" ]] || export rvm_stored_umask=$(umask)
- if (( ${rvm_ignore_rvmrc:=0} == 0 ))
- then
- rvm_rvmrc_files=("/etc/rvmrc" "$HOME/.rvmrc")
- if [[ -n "${rvm_prefix:-}" ]] && ! [[ "$HOME/.rvmrc" -ef "${rvm_prefix}/.rvmrc" ]]
- then rvm_rvmrc_files+=( "${rvm_prefix}/.rvmrc" )
- fi
- for rvmrc in "${rvm_rvmrc_files[@]}"
- do
- if [[ -f "$rvmrc" ]]
- then
- # pre-gnu
- if GREP_OPTIONS="" \command \grep '^\s*rvm .*$' "$rvmrc" >/dev/null 2>&1
- then
- printf "%b" "
- Error:
- $rvmrc is for rvm settings only.
- rvm CLI may NOT be called from within $rvmrc.
- Skipping the loading of $rvmrc"
- return 1
- else
- source "$rvmrc"
- fi
- fi
- done
- unset rvm_rvmrc_files
- fi
- # duplication marker jdgkjnfnkjdngjkfnd4fd
- # detect rvm_path if not set
- if
- [[ -z "${rvm_path:-}" ]]
- then
- if
- [[ -n "${BASH_SOURCE:-$_}" && -f "${BASH_SOURCE:-$_}" ]]
- then
- rvm_path="${BASH_SOURCE:-$_}"
- rvm_path="$( \command \cd "${rvm_path%/scripts/rvm}">/dev/null; pwd )"
- rvm_prefix=$( dirname $rvm_path )
- elif
- [[ "${UID:-}" == "0" || "${USER:-}" == "root" ]]
- then
- if
- (( ${rvm_user_install_flag:-0} == 0 ))
- then
- rvm_prefix="/usr/local"
- rvm_path="${rvm_prefix}/rvm"
- else
- rvm_prefix="$HOME"
- rvm_path="${rvm_prefix}/.rvm"
- fi
- else
- if
- [[ -d "$HOME/.rvm" && -s "$HOME/.rvm/scripts/rvm" ]]
- then
- rvm_prefix="$HOME"
- rvm_path="${rvm_prefix}/.rvm"
- else
- rvm_prefix="/usr/local"
- rvm_path="${rvm_prefix}/rvm"
- fi
- fi
- else
- # remove trailing slashes, btw. %%/ <- does not work as expected
- rvm_path="${rvm_path%%+(\/)}"
- fi
- # guess rvm_prefix if not set
- if [[ -z "${rvm_prefix}" ]]
- then
- rvm_prefix=$( dirname $rvm_path )
- fi
- # duplication marker kkdfkgnjfndgjkndfjkgnkfjdgn
- [[ -n "${rvm_user_install_flag:-}" ]] ||
- case "$rvm_path" in
- (/usr/local/rvm) rvm_user_install_flag=0 ;;
- ($HOME/*|/${USER// /_}*) rvm_user_install_flag=1 ;;
- (*) rvm_user_install_flag=0 ;;
- esac
- export rvm_loaded_flag
- if [[ -n "${BASH_VERSION:-}" || -n "${ZSH_VERSION:-}" ]] &&
- \typeset -f rvm >/dev/null 2>&1
- then
- rvm_loaded_flag=1
- else
- rvm_loaded_flag=0
- fi
- if
- (( ${rvm_loaded_flag:=0} == 0 )) || (( ${rvm_reload_flag:=0} == 1 ))
- then
- if
- [[ -n "${rvm_path}" && -d "$rvm_path" ]]
- then
- true ${rvm_scripts_path:="$rvm_path/scripts"}
- if
- [[ ! -f "$rvm_scripts_path/base" ]]
- then
- printf "%b" "WARNING:
- Could not source '$rvm_scripts_path/base' as file does not exist.
- RVM will likely not work as expected.\n"
- elif
- ! source "$rvm_scripts_path/base"
- then
- printf "%b" "WARNING:
- Errors sourcing '$rvm_scripts_path/base'.
- RVM will likely not work as expected.\n"
- else
- __rvm_ensure_is_a_function
- __rvm_setup
- export rvm_version
- rvm_version="$(__rvm_version_installed)"
- alias rvm-restart="rvm_reload_flag=1 source '${rvm_scripts_path:-${rvm_path}/scripts}/rvm'"
- # Try to load RVM ruby if none loaded yet
- __path_to_ruby="$( builtin command -v ruby 2>/dev/null || true )"
- if
- [[ -z "${__path_to_ruby}" ]] ||
- [[ "${__path_to_ruby}" != "${rvm_path}"* ]] ||
- [[ "${__path_to_ruby}" == "${rvm_path}/bin/ruby" ]]
- then
- if
- [[ -n "${rvm_environments_path:-}" &&
- -s "${rvm_environments_path}/default"
- ]]
- then
- source "${rvm_environments_path}/default"
- elif
- [[ "${rvm_environments_path:-}" != "${rvm_path}/environments" &&
- -s "${rvm_path}/environments/default"
- ]]
- then
- source "${rvm_path}/environments/default"
- fi
- if
- [[ ${rvm_project_rvmrc:-1} -gt 0 ]] &&
- ! __function_on_stack __rvm_project_rvmrc
- then
- # Reload the rvmrc, use promptless ensuring shell processes does not
- # prompt if .rvmrc trust value is not stored, revert to default on fail
- if
- rvm_current_rvmrc=""
- rvm_project_rvmrc_default=2 rvm_promptless=1 __rvm_project_rvmrc
- then
- rvm_hook=after_cd
- source "${rvm_scripts_path:-${rvm_path}/scripts}/hook"
- fi
- fi
- elif
- [[ "${__path_to_ruby}" == "${rvm_path}"* ]] &&
- [[ -z "${GEM_HOME:-}" || -z "${GEM_PATH:-}" ]]
- then
- echo "
- Warning: PATH set to RVM ruby but GEM_HOME and/or GEM_PATH not set, see:
- https://github.com/rvm/rvm/issues/3212
- " >&2
- if
- [[ -n "${SUDO_USER:-}" ]]
- then
- echo "Hint: To fix PATH errors try using 'rvmsudo' instead of 'sudo', see:
- https://stackoverflow.com/questions/27784961/received-warning-message-path-set-to-rvm-after-updating-ruby-version-using-rvm/28080063#28080063
- " >&2
- fi
- fi
- unset __path_to_ruby
- # Makes sure rvm_bin_path is in PATH atleast once.
- [[ ":${PATH}:" == *":${rvm_bin_path}:"* ]] || PATH="$PATH:${rvm_bin_path}"
- if
- (( ${rvm_reload_flag:=0} == 1 ))
- then
- [[ "${rvm_auto_reload_flag:-0}" == 2 ]] || rvm_notify "RVM reloaded!"
- unset __rvm_project_rvmrc_lock
- fi
- rvm_loaded_flag=1
- __rvm_teardown
- # Opt-in for custom prompt through by setting:
- # rvm_ps1=1
- # in either /etc/rvmrc or $HOME/.rvmrc
- if
- [[ ${rvm_ps1:-0} -eq 1 ]]
- then
- # Source RVM ps1 functions for a great prompt.
- if
- [[ -s "$rvm_path/contrib/ps1_functions" ]]
- then
- source "$rvm_path/contrib/ps1_functions"
- elif
- [[ -s "/usr/local/rvm/contrib/ps1_functions" ]]
- then
- source "/usr/local/rvm/contrib/ps1_functions"
- fi
- if command -v ps1_set >/dev/null 2>&1
- then ps1_set
- fi
- fi
- fi
- else
- printf "%b" "\n\$rvm_path ($rvm_path) does not exist."
- fi
- unset rvm_prefix_needs_trailing_slash rvm_gems_cache_path rvm_gems_path rvm_project_rvmrc_default rvm_gemset_separator rvm_reload_flag
- fi
|