Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

159 строки
2.9 KiB

10 лет назад
  1. #!/usr/bin/env bash
  2. # Summary: Configure the shell environment for pyenv-virtualenv
  3. # Usage: eval "$(pyenv virtualenv-init - [<shell>])"
  4. #
  5. # Automatically activates a Python virtualenv environment based on current
  6. # pyenv version.
  7. #
  8. set -e
  9. [ -n "$PYENV_DEBUG" ] && set -x
  10. resolve_link() {
  11. $(type -p greadlink readlink | head -1) "$1"
  12. }
  13. abs_dirname() {
  14. local cwd="$(pwd)"
  15. local path="$1"
  16. while [ -n "$path" ]; do
  17. cd "${path%/*}"
  18. local name="${path##*/}"
  19. path="$(resolve_link "$name" || true)"
  20. done
  21. pwd
  22. cd "$cwd"
  23. }
  24. PYENV_VIRTUALENV_INSTALL_PREFIX="$(dirname "$(abs_dirname "$0")")"
  25. print=""
  26. for args in "$@"
  27. do
  28. if [ "$args" = "-" ]; then
  29. print=1
  30. shift
  31. fi
  32. done
  33. shell="${1:-$PYENV_SHELL}"
  34. if [ -z "$shell" ]; then
  35. shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)"
  36. shell="${shell##-}"
  37. shell="${shell%% *}"
  38. shell="${shell:-$SHELL}"
  39. shell="${shell##*/}"
  40. fi
  41. if [ -z "$print" ]; then
  42. case "$shell" in
  43. bash )
  44. profile='~/.bash_profile'
  45. ;;
  46. zsh )
  47. profile='~/.zshrc'
  48. ;;
  49. ksh )
  50. profile='~/.profile'
  51. ;;
  52. fish )
  53. profile='~/.config/fish/config.fish'
  54. ;;
  55. * )
  56. profile='your profile'
  57. ;;
  58. esac
  59. { echo "# Load pyenv-virtualenv automatically by adding"
  60. echo "# the following to ${profile}:"
  61. echo
  62. case "$shell" in
  63. fish )
  64. echo 'status --is-interactive; and . (pyenv virtualenv-init -|psub)'
  65. ;;
  66. * )
  67. echo 'eval "$(pyenv virtualenv-init -)"'
  68. ;;
  69. esac
  70. echo
  71. } >&2
  72. exit 1
  73. fi
  74. case "$shell" in
  75. fish )
  76. cat <<EOS
  77. setenv PATH '${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims' \$PATH;
  78. setenv PYENV_VIRTUALENV_INIT 1;
  79. EOS
  80. ;;
  81. * )
  82. cat <<EOS
  83. export PATH="${PYENV_VIRTUALENV_ROOT:-${PYENV_VIRTUALENV_INSTALL_PREFIX}}/shims:${PATH}";
  84. export PYENV_VIRTUALENV_INIT=1;
  85. EOS
  86. ;;
  87. esac
  88. case "$shell" in
  89. fish )
  90. cat <<EOS
  91. function _pyenv_virtualenv_hook --on-event fish_prompt;
  92. set -l ret \$status
  93. if [ -n "\$VIRTUAL_ENV" ]
  94. pyenv activate --quiet; or pyenv deactivate --quiet; or true
  95. else
  96. pyenv activate --quiet; or true
  97. end
  98. return \$ret
  99. end
  100. EOS
  101. ;;
  102. ksh )
  103. cat <<EOS
  104. function _pyenv_virtualenv_hook() {
  105. EOS
  106. ;;
  107. * )
  108. cat <<EOS
  109. _pyenv_virtualenv_hook() {
  110. EOS
  111. ;;
  112. esac
  113. if [[ "$shell" != "fish" ]]; then
  114. cat <<EOS
  115. local ret=\$?
  116. if [ -n "\$VIRTUAL_ENV" ]; then
  117. eval "\$(pyenv sh-activate --quiet || pyenv sh-deactivate --quiet || true)" || true
  118. else
  119. eval "\$(pyenv sh-activate --quiet || true)" || true
  120. fi
  121. return \$ret
  122. };
  123. EOS
  124. case "$shell" in
  125. bash )
  126. cat <<EOS
  127. if ! [[ "\$PROMPT_COMMAND" =~ _pyenv_virtualenv_hook ]]; then
  128. PROMPT_COMMAND="_pyenv_virtualenv_hook;\$PROMPT_COMMAND";
  129. fi
  130. EOS
  131. ;;
  132. zsh )
  133. cat <<EOS
  134. typeset -g -a precmd_functions
  135. if [[ -z \$precmd_functions[(r)_pyenv_virtualenv_hook] ]]; then
  136. precmd_functions=(_pyenv_virtualenv_hook \$precmd_functions);
  137. fi
  138. EOS
  139. ;;
  140. * )
  141. # FIXME: what should i do here??
  142. ;;
  143. esac
  144. fi