aboutsummaryrefslogtreecommitdiff
path: root/.local/share/bin/venvgen
blob: 25f2c78543eaa3abef63e6c8e6a4b32a7bc4d27d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/sh

# check if the input is valid
for arg in "$@" ; do
	case "$arg" in
		*=*) ;;
		*)
			echo "error: missing assignment operator in argument ($arg)" >&2
			exit 1
			;;
	esac
done

# shebang
printf '#!/bin/sh\n'

# save old variables
for arg in "$@" ; do
	name="${arg%%=*}"
	eval "hasval=\${$name+x}"
	[ -n "$hasval" ] && printf '_%s="${%s}"\n' "$name" "$name"
done

# set new variables
for arg in "$@" ; do
	name="${arg%%=*}"
	value="${arg#*=}"
	printf 'export %s=%q\n' "$name" "$value"
done

# deactivate function
printf 'deactivate() {\n'
for arg in "$@" ; do
	name="${arg%%=*}"
	eval "hasval=\${$name+x}"
	if [ -n "$hasval" ] ; then
		printf '\t%s="${_%s}"\n' "$name" "$name"
		printf '\tunset -v _%s\n' "$name"
	else
		printf '\tunset -v %s\n' "$name"
	fi
done
printf '\thash -r 2>/dev/null\n'
printf '\tunset -f deactivate\n'
printf '}\n'
printf 'hash -r 2>/dev/null\n'