4
4
#
5
5
# Usage: pyenv users [-r|--raw] [directory]
6
6
#
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>"
8
9
#
9
10
# Scans [directory] for virtual environments whose `python` commands
10
11
# are symlinks back into a pyenv version. Default: current directory.
@@ -35,17 +36,24 @@ parse_options() {
35
36
done
36
37
}
37
38
38
- unset RAW
39
+ unset ABSOLUTE RAW
39
40
parse_options " $@ "
40
41
for option in " ${OPTIONS[@]} " ; do
41
42
case " $option " in
43
+ " A" | " absolute-paths" )
44
+ ABSOLUTE=1
45
+ ;;
42
46
" r" | " raw" )
43
- RAW=true
47
+ RAW=1
44
48
;;
45
49
" h" | " help" )
46
50
pyenv help users
47
51
exit 0
48
52
;;
53
+ * )
54
+ echo " pyenv-users: unrecognized option '$option '"
55
+ exit 1
56
+ ;;
49
57
esac
50
58
done
51
59
@@ -54,10 +62,15 @@ if [[ "${#ARGUMENTS[@]}" == 0 ]]; then
54
62
elif [[ " ${# ARGUMENTS[@]} " == 1 ]]; then
55
63
DIR=" ${ARGUMENTS[0]} "
56
64
else
57
- echo -e " \nToo many directory arguments.\n"
58
- pyenv help users
65
+ echo " pyenv-users: too many directory arguments"
59
66
exit 1
60
67
fi
68
+ if [ -n " $ABSOLUTE " ]; then
69
+ PREFIX=" "
70
+ else
71
+ PREFIX=" $DIR /"
72
+ fi
73
+
61
74
62
75
# ----------------------------------------------------------------------------
63
76
# Finished parsing the arguments. Begin the actual functionality.
73
86
74
87
# Collect all symlinks named `python` that point into $PYENV_ROOT
75
88
cmd=" readlink -f '{}' | grep -q ${PYENV_ROOT} "
76
- unset i
77
89
while IFS= read -r -d $' \0' file; do
78
- links[i++]= " $file "
90
+ links+=( " $file " )
79
91
done < <( find -H " $DIR " -name " python" -type l -exec sh -c " $cmd " \; -print0)
80
92
81
93
# Turn each link into a (version, venv) string pair
82
94
regex=" ${PYENV_ROOT} /versions/(.+)/bin/(.+)"
83
- unset i
84
95
for link in " ${links[@]} " ; do
85
96
linkpath=$( realpath -s " $link " )
86
97
target=$( readlink -f " $link " )
@@ -90,8 +101,8 @@ for link in "${links[@]}"; do
90
101
if grep -v -q " $PYENV_ROOT " <<< " $linkpath" || \
91
102
grep -q " $PYENV_ROOT /versions/$version /envs" <<< " $linkpath"
92
103
then
93
- versions[i]= " $version "
94
- venvs[i++]= " ${link%/ bin/ python} "
104
+ versions+=( " $version " )
105
+ venvs+=( " ${link%/ bin/ python} " )
95
106
fi
96
107
done
97
108
@@ -102,9 +113,9 @@ for (( k=0; k < K; k++ )); do
102
113
if (( width > maxwidth )) ; then maxwidth=$width ; fi
103
114
done
104
115
for (( 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 } "
107
118
else
108
- echo " $ {versions[$k]}" : " ${venvs[$k] } "
119
+ printf " %-*s %s\n " " $maxwidth " " $ {versions[$k]}" " ${venvs[k] # $PREFIX } "
109
120
fi
110
121
done | sort
0 commit comments