#!/usr/bin/env bash rvm_base_except="selector" source "$rvm_scripts_path/base" list_gemsets() { if [[ "$1" = "strings" ]]; then list_gemset_strings return 0 fi echo current_ruby="$(__rvm_environment_identifier)" local all_rubies="$(list_strings)" printf "rvm gemsets\n" for version in $(\ls $rvm_gems_path/ 2> /dev/null | awk '/[a-z]*-.*/ {print $NF}') ; do ruby_version_name="$(echo "$version" | awk -F"$rvm_gemset_separator" '{print $1}')" [[ "$all_rubies" != *"$ruby_version_name"* ]] && continue if [[ -n "$(echo $version | awk '/^jruby-/')" ]] ; then string="[ $($rvm_rubies_path/$ruby_version_name/bin/ruby -v | awk '{print $NF}' | sed -e 's/\[//' -e 's/\]//') ]" elif [[ -n "$(echo $version | awk '/^maglev-|^macruby-/')" ]] ; then string="[ x86_64 ]" else string="[ $(file $rvm_rubies_path/$ruby_version_name/bin/ruby | awk '/x86.64/ {print "x86_64"} /386/ {print "i386"} /ppc/ {print "ppc"}' | \tr "\n" ' ')]" fi unset ruby_version_name printf "\n" if [[ "$version" = "$current_ruby" ]]; then printf "=> " else printf " " fi printf "$(tput setaf 2)$version$(tput sgr0) $string" done ; unset version if [[ -f "$rvm_config_path/default" ]] && [[ -s $rvm_config_path/default ]] ; then version=$(\grep 'MY_RUBY_HOME' $rvm_config_path/default | head -n1 | awk -F"'" '{print $2}' | xargs basename --) if [[ ! -z "$version" ]] ; then printf "\n\nDefault Ruby (for new shells)\n" string="[ $(file $rvm_rubies_path/$version/bin/ruby | awk '/x86.64/ {print "x86_64"} /386/ {print "i386"} /ppc/ {print "ppc"}' | \tr "\n" ' ')]" printf "\n $(tput setaf 2)$version$(tput sgr0) $string" fi ; unset version fi printf "\n" unset current_ruby version selected system_ruby system_version string binary echo } list_default() { if [[ "$1" = "string" ]] ; then $rvm_scripts_path/alias show default 2>/dev/null | awk -F"$rvm_gemset_separator" '{print $1}' | xargs basename -- else if [[ -L "$rvm_rubies_path/default" ]]; then version=$($rvm_scripts_path/alias show default 2>/dev/null | awk -F"$rvm_gemset_separator" '{print $1}' | xargs basename --) if [[ ! -z "$version" ]] ; then printf "\n\nDefault Ruby (for new shells)\n" string="[ $(file $rvm_rubies_path/$version/bin/ruby | awk '/x86.64/ {print "x86_64"} /386/ {print "i386"} /ppc/ {print "ppc"}' | \tr "\n" ' ')]" printf "\n $(tput setaf 2)$version$(tput sgr0) $string\n" fi ; unset version fi fi } list_ruby_svn_tags() { while read -r tag do prefix="$(echo ${tag/\//} | sed 's#^v1_##' | awk -F'_' '{print "(ruby-)1."$1"."$2}' | sed 's#p$##')" echo "${prefix}-t${tag/\//}" unset prefix tag done < <(svn list http://svn.ruby-lang.org/repos/ruby/tags/ | awk '/^v1_[8|9]/') } # Query for valid rvm ruby strings # This is meant to be used with scripting. list_strings() { echo $(\ls $rvm_rubies_path) } # This is meant to be used with scripting. list_gemset_strings() { local all_rubies="$(list_strings)" for gemset in $(\ls $rvm_gems_path/ 2>/dev/null | xargs -n1 basename -- | \grep -v '^\(@\|doc$\|cache$\|system$\)' | sort); do local ruby_name="$(echo "$gemset" | awk -F$rvm_gemset_separator '{print $1}')" [[ "$all_rubies" != *"$ruby_name"* ]] && continue echo "$gemset" done } # This is meant to be used with scripting. list_known_strings() { cat "$rvm_config_path/known" | sed -e 's/#.*$//g' -e 's/(//g' -e 's/)//g' | sort -r | uniq } list_known() { if [[ "$1" = "strings" ]]; then list_known_strings return 0 fi if [[ -z "$rvm_interactive" ]] || [[ -z "$TERM" ]] || [[ "unknown" = "$TERM" ]] ; then cat "$rvm_config_path/known" else cat "$rvm_config_path/known" | ${PAGER:-less} fi } list_rubies_strings() { find "$rvm_rubies_path/" -type d -maxdepth 1 | tail -n+2 | xargs -n1 basename -- | __rvm_strip } list_rubies() { if [[ "$1" = "strings" ]]; then list_rubies_strings return 0 fi echo current_ruby="$(__rvm_environment_identifier | awk -F"$rvm_gemset_separator" '{print $1}')" printf "rvm rubies\n" for version in $(\ls $rvm_rubies_path/ 2> /dev/null | awk '/[a-z]*-.*/ {print $NF}') ; do if [[ ! -z "$(echo $version | awk '/^jruby-/')" ]] ; then string="[ $($rvm_rubies_path/$version/bin/ruby -v | awk '{print $NF}' | sed -e 's/\[//' -e 's/\]//') ]" elif [[ ! -z "$(echo $version | awk '/^maglev-|^macruby-/')" ]] ; then string="[ x86_64 ]" else string="[ $(file $rvm_rubies_path/$version/bin/ruby | awk '/x86.64/ {print "x86_64"} /386/ {print "i386"} /ppc/ {print "ppc"}' | \tr "\n" ' ')]" fi printf "\n" if [[ "$version" = "$current_ruby" ]]; then printf "=> " else printf " " fi printf "$(tput setaf 2)$version$(tput sgr0) $string" done ; unset version if [[ -f "$rvm_config_path/default" ]] && [[ -s $rvm_config_path/default ]] ; then version=$(\grep 'MY_RUBY_HOME' $rvm_config_path/default | head -n 1 | awk -F"'" '{print $2}' | xargs basename --) if [[ ! -z "$version" ]] ; then printf "\n\nDefault Ruby (for new shells)\n" string="[ $(file $rvm_rubies_path/$version/bin/ruby | awk '/x86.64/ {print "x86_64"} /386/ {print "i386"} /ppc/ {print "ppc"}' | \tr "\n" ' ')]" printf "\n $(tput setaf 2)$version$(tput sgr0) $string" fi ; unset version fi printf "\n" unset current_ruby version selected system_ruby system_version string binary echo } # List all rvm installed rubies, default ruby and system ruby. # Display the rubies, indicate their architecture and indicate which is currently used. # This is not meant to be used with scripting. This is for interactive mode usage only. action="$1" [[ $# -gt 0 ]] && shift if [[ "known" = "$action" ]] ; then list_known elif [[ "known_strings" = "$action" ]] ; then list_known_strings elif [[ "gemsets" = "$action" ]] ; then list_gemsets "$@" elif [[ "default" = "$action" ]] ; then list_default elif [[ -z "$action" ]] || [[ "rubies" = "$action" ]] ; then list_rubies "$@" elif [[ "strings" = "$action" ]] ; then list_strings elif [[ "ruby_svn_tags" = "$action" ]] ; then list_ruby_svn_tags else # help printf "\nUsage: rvm list {known,gemsets,default,rubies,strings,known_strings}" false fi exit $?