44#
55# Usage: pyenv users [-r|--raw] [directory]
66#
7- # -r/--raw Raw output strings as "<version>:<venv-path>"
7+ # -A/--absolute-paths Output absolute paths instead of relative paths
8+ # -r/--raw Raw output strings as "<version>:<venv-path>"
89#
910# Scans [directory] for virtual environments whose `python` commands
1011# are symlinks back into a pyenv version. Default: current directory.
@@ -35,17 +36,24 @@ parse_options() {
3536 done
3637}
3738
38- unset RAW
39+ unset ABSOLUTE RAW
3940parse_options " $@ "
4041for option in " ${OPTIONS[@]} " ; do
4142 case " $option " in
43+ " A" | " absolute-paths" )
44+ ABSOLUTE=1
45+ ;;
4246 " r" | " raw" )
43- RAW=true
47+ RAW=1
4448 ;;
4549 " h" | " help" )
4650 pyenv help users
4751 exit 0
4852 ;;
53+ * )
54+ echo " pyenv-users: unrecognized option '$option '"
55+ exit 1
56+ ;;
4957 esac
5058done
5159
@@ -54,10 +62,15 @@ if [[ "${#ARGUMENTS[@]}" == 0 ]]; then
5462elif [[ " ${# ARGUMENTS[@]} " == 1 ]]; then
5563 DIR=" ${ARGUMENTS[0]} "
5664else
57- echo -e " \nToo many directory arguments.\n"
58- pyenv help users
65+ echo " pyenv-users: too many directory arguments"
5966 exit 1
6067fi
68+ if [ -n " $ABSOLUTE " ]; then
69+ PREFIX=" "
70+ else
71+ PREFIX=" $DIR /"
72+ fi
73+
6174
6275# ----------------------------------------------------------------------------
6376# Finished parsing the arguments. Begin the actual functionality.
7386
7487# Collect all symlinks named `python` that point into $PYENV_ROOT
7588cmd=" readlink -f '{}' | grep -q ${PYENV_ROOT} "
76- unset i
7789while IFS= read -r -d $' \0' file; do
78- links[i++]= " $file "
90+ links+=( " $file " )
7991done < <( find -H " $DIR " -name " python" -type l -exec sh -c " $cmd " \; -print0)
8092
8193# Turn each link into a (version, venv) string pair
8294regex=" ${PYENV_ROOT} /versions/(.+)/bin/(.+)"
83- unset i
8495for link in " ${links[@]} " ; do
8596 linkpath=$( realpath -s " $link " )
8697 target=$( readlink -f " $link " )
@@ -90,8 +101,8 @@ for link in "${links[@]}"; do
90101 if grep -v -q " $PYENV_ROOT " <<< " $linkpath" || \
91102 grep -q " $PYENV_ROOT /versions/$version /envs" <<< " $linkpath"
92103 then
93- versions[i]= " $version "
94- venvs[i++]= " ${link%/ bin/ python} "
104+ versions+=( " $version " )
105+ venvs+=( " ${link%/ bin/ python} " )
95106 fi
96107done
97108
@@ -102,9 +113,9 @@ for (( k=0; k < K; k++ )); do
102113 if (( width > maxwidth )) ; then maxwidth=$width ; fi
103114done
104115for (( k= 0 ; k < K; k++ )) ; do
105- if [ -z " $RAW " ]; then
106- printf " %-*s %s\n " " $maxwidth " " $ {versions[$k]}" " ${venvs[k] } "
116+ if [ -n " $RAW " ]; then
117+ echo " $ {versions[$k]}" : " ${venvs[$k] # $PREFIX } "
107118 else
108- echo " $ {versions[$k]}" : " ${venvs[$k] } "
119+ printf " %-*s %s\n " " $maxwidth " " $ {versions[$k]}" " ${venvs[k] # $PREFIX } "
109120 fi
110121done | sort
0 commit comments