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'
|