diff options
| author | Loek Le Blansch <loek@pipeframe.xyz> | 2026-03-26 20:50:48 +0100 |
|---|---|---|
| committer | Loek Le Blansch <loek@pipeframe.xyz> | 2026-03-26 20:50:48 +0100 |
| commit | d842d7f125cf055d24cdb2e4b0d94c3885c93d72 (patch) | |
| tree | 3fc7e2c7f1642a56546816c348cc4ef9c400a56f /.local/share/bin/venvgen | |
| parent | 7d782c4af6a369ec5a802eeededf18e5f355088b (diff) | |
Diffstat (limited to '.local/share/bin/venvgen')
| -rwxr-xr-x | .local/share/bin/venvgen | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/.local/share/bin/venvgen b/.local/share/bin/venvgen new file mode 100755 index 0000000..25f2c78 --- /dev/null +++ b/.local/share/bin/venvgen @@ -0,0 +1,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' + |