|
|
- #!/usr/bin/env bash
- # Summary: Configure the shell environment for pyenv
- # Usage: eval "$(pyenv init [-|--path] [--no-rehash] [<shell>])"
-
- set -e
- [ -n "$PYENV_DEBUG" ] && set -x
-
- # Provide pyenv completions
- if [ "$1" = "--complete" ]; then
- echo -
- echo --path
- echo --no-rehash
- echo bash
- echo fish
- echo ksh
- echo zsh
- exit
- fi
-
- mode="help"
- no_rehash=""
- for args in "$@"
- do
- if [ "$args" = "-" ]; then
- mode="print"
- shift
- fi
-
- if [ "$args" = "--path" ]; then
- mode="path"
- shift
- fi
-
- if [ "$args" = "--no-rehash" ]; then
- no_rehash=1
- shift
- fi
- done
-
- shell="$1"
- if [ -z "$shell" ]; then
- shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)"
- shell="${shell%% *}"
- shell="${shell##-}"
- shell="${shell:-$SHELL}"
- shell="${shell##*/}"
- shell="${shell%%-*}"
- fi
-
- root="${0%/*}/.."
-
- function main() {
- case "$mode" in
- "help")
- help_
- exit 1
- ;;
- "path")
- print_path
- exit 0
- ;;
- "print")
- init_dirs
- print_env
- print_completion
- print_shell_function
- exit 0
- ;;
- esac
- # should never get here
- exit 2
- }
-
- function help_() {
- case "$shell" in
- bash )
- profile='~/.bash_profile'
- rc='~/.bashrc'
- ;;
- zsh )
- profile='~/.zprofile'
- rc='~/.zshrc'
- ;;
- ksh )
- profile='~/.profile'
- rc='~/.profile'
- ;;
- * )
- profile='your shell'\''s login startup file'
- rc='your shell'\''s interactive startup file'
- ;;
- esac
-
- {
- echo
- echo '# See the README for instructions on how to set up'
- echo '# your shell environment for Pyenv.'
- echo
- } >&2
- }
-
- function init_dirs() {
- mkdir -p "${PYENV_ROOT}/"{shims,versions}
- }
-
- function print_path() {
- # Need to use the login shell rather than the current one
- case "$shell" in
- fish )
- echo "set -gx PATH '${PYENV_ROOT}/shims' \$PATH"
- ;;
- * )
- echo 'export PATH="'${PYENV_ROOT}'/shims:${PATH}"'
- ;;
- esac
- }
-
- function print_env() {
- case "$shell" in
- fish )
- echo "set -gx PYENV_SHELL $shell"
- ;;
- * )
- echo "export PYENV_SHELL=$shell"
- ;;
- esac
- }
-
- function print_completion() {
- completion="${root}/completions/pyenv.${shell}"
- if [ -r "$completion" ]; then
- echo "source '$completion'"
- fi
-
- if [ -z "$no_rehash" ]; then
- echo 'command pyenv rehash 2>/dev/null'
- fi
- }
-
- function print_shell_function() {
- commands=(`pyenv-commands --sh`)
- case "$shell" in
- fish )
- cat <<EOS
- function pyenv
- set command \$argv[1]
- set -e argv[1]
-
- switch "\$command"
- case ${commands[*]}
- source (pyenv "sh-\$command" \$argv|psub)
- case '*'
- command pyenv "\$command" \$argv
- end
- end
- EOS
- ;;
- ksh )
- cat <<EOS
- function pyenv {
- typeset command
- EOS
- ;;
- * )
- cat <<EOS
- pyenv() {
- local command
- EOS
- ;;
- esac
-
- if [ "$shell" != "fish" ]; then
- IFS="|"
- cat <<EOS
- command="\${1:-}"
- if [ "\$#" -gt 0 ]; then
- shift
- fi
-
- case "\$command" in
- ${commands[*]})
- eval "\$(pyenv "sh-\$command" "\$@")"
- ;;
- *)
- command pyenv "\$command" "\$@"
- ;;
- esac
- }
- EOS
- fi
- }
-
- main
|