#!/usr/bin/env bash set -e [ -n "$RBENV_DEBUG" ] && set -x # content from single commented line marked with a word such as "Usage" or "Summary" extract_line() { grep "^# ${1}:" "$2" | head -1 | cut -d ' ' -f3- } # content of multiple consecutive commented lines starting with a word such as "Help" extract_section() { sed -En "/^# ${1}: /,/^[^#]/s/^# ?//p" "$2" | sed "1s/${1}: //" } # print aligned command names with help summary print_summary() { if [ ! -h "$1" ]; then local summary=$(extract_line Summary "$1") if [ -n "$summary" ]; then local name=$(basename "$1") echo "${name#rbenv-}" | awk '{ printf " %-14s ", $1 }' echo -n $summary echo else return 1 fi fi } print_help() { local usage="$(extract_line Usage "$1")" local halp="$(extract_section Help "$1")" [ -z "$halp" ] && halp="$(extract_line Summary "$1")" if [ -n "$usage" ]; then echo usage: $usage [ -n "$halp" ] && echo && echo "$halp" else echo "Sorry, this command isn't documented yet." >&2 return 1 fi } print_summaries() { for command in $1; do print_summary "$(command -v rbenv-"$command")" done } print_set_version() { echo " should be a string matching a Ruby version known by rbenv." local versions="$(rbenv-versions --bare)" if [ -z "$versions" ]; then echo "There are currently no Ruby versions installed for rbenv." else echo "The currently installed Ruby versions are:" echo "$versions" | sed 's/^/ /' fi echo echo "The special version string 'system' will use your default system Ruby." } case "$1" in "") echo "usage: rbenv [] Some useful rbenv commands are: $(print_summaries "commands rehash global local shell version versions which whence") See 'rbenv help ' for information on a specific command. For full documentation, see: https://github.com/sstephenson/rbenv#readme" ;; global) echo "usage: rbenv global Sets the global Ruby version. You can override the global version at any time by setting a directory-specific version with \`rbenv local' or by setting the RBENV_VERSION environment variable. $(print_set_version)" ;; local) echo "usage: rbenv local rbenv local --unset Sets the local directory-specific Ruby version by writing the version name to a file named '.rbenv-version'. When you run a Ruby command, rbenv will look for an '.rbenv-version' file in the current directory and each parent directory. If no such file is found in the tree, rbenv will use the global Ruby version specified with \`rbenv global', or the version specified in the RBENV_VERSION environment variable. $(print_set_version)" ;; shell) echo "usage: rbenv shell rbenv shell --unset Sets a shell-specific Ruby version by setting the 'RBENV_VERSION' environment variable in your shell. This version overrides both project-specific versions and the global version. $(print_set_version)" ;; *) command_path="$(command -v "rbenv-$1" || true)" if [ -n "$command_path" ]; then print_help "$command_path" else echo "rbenv: no such command \`$1'" >&2 exit 1 fi esac