#!/usr/bin/env bash __rvm_if_sudo() { \typeset -a __command __command=() (( UID == 0 )) || __command+=( \command \sudo -p "%p password required for '$*': " ) __command+=( $@ ) "${__command[@]}" || return $? } __rvm_fix_permissions_fix_rights() { case "${__user}" in (*:*) rvm_log "Fixing rights with 'g+w' - this might take a few long minutes..." __rvm_if_sudo chmod -R g+w "${rvm_path}" || return $? ;; esac } __rvm_fix_permissions_fix_directories() { \typeset -a __broken_dirs \typeset __broken_dir while __rvm_read_lines __broken_dirs <( find "${rvm_path}" -type d -not -perm -111 2>/dev/null || true ) && (( ${#__broken_dirs[@]} )) do for __broken_dir in "${__broken_dirs[@]}" do chmod +x "${__broken_dir}" || return $? done done } __rvm_fix_permissions_fix_message() { \typeset __type case "${__user}" in (:*) __type="group" ;; (*:*) __type="user/group" ;; (*) __type="user" ;; esac rvm_log "Fixing ${__type} for ${__user} - this might take a few long minutes..." } __rvm_fix_permissions_fix() { __rvm_fix_permissions_fix_message __rvm_if_sudo chown -R "${__user}" "${rvm_path}" && __rvm_fix_permissions_fix_rights && rvm_log "Finished fixing." || { \typeset __result=$? rvm_error "Failed fixing, read the above messages." return ${__result} } } __rvm_fix_permissions_select() { case "${__user}" in ("") if (( ${rvm_user_install_flag:=0} == 0 )) then __user="system" else __user="user" fi ;; esac case "${__user}" in (system) __user=":${rvm_group_name:-rvm}" ;; (user) __user="$USER" ;; esac } __rvm_fix_permissions() { \typeset __user="${1:-}" __rvm_fix_permissions_select && __rvm_fix_permissions_fix && __rvm_fix_permissions_fix_directories || return $? } __rvm_fix_permissions "${args[@]}"