cannot unset env variables from script

10,242

Solution 1

This is a standard answer, basically. You can't do that, because the script runs in a new child process. That process gets its own environment, and can't change that of the parent, either to set variables or to unset them.

You can run the script in the current environment using the . command. And you can source /etc/profile in the same way:

. /etc/profile

Solution 2

I tried to run your script and it does not work for me.

I google a bit and found this:

unset $(/usr/bin/env | egrep '^(\w+)=(.*)$' | \
egrep -vw 'PWD|USER|LANG' | /usr/bin/cut -d= -f1);

This one actually works ;-)

For sourcing files

source /etc/profile

is the right way as you said.

If I modify your script like this

unset $(env | awk -F= '{print $1}' | xargs)

it also works.

I do not think if there is any difference running the command interactively vs from a script.

Share:
10,242

Related videos on Youtube

w00t
Author by

w00t

Updated on September 17, 2022

Comments

  • w00t
    w00t over 1 year

    I am trying to unset all environment variables from within a script. The script runs fine but if I run env it still shows all the variables set.
    If I run the command from CLI, it works and the variables are unset.

    unset `env | awk -F= '/^\w/ {print $1}' | xargs`
    

    Have any idea how to run this from a script?
    Also, have any idea how to source /etc/profile from a script? This doesn't work either.

    I need to set variables with same names but different paths, depending on the instances my users need.

    Later edit:
    ok, I ended up with this (rather not elegant, but whatever) solution:

    . script 
    

    which contains:

    unset `env | awk -F= '/^\w/ {print $1}'|egrep -v "HOSTNAME|TERM|SHELL|HISTSIZE|SSH_CLIENT|SSH_TTY|USER|LS_COLORS|KDEDIR|MAIL|PATH|INPUTRC|PWD|LANG|HISTIGNORE|SSH_ASKPASS|TEST|SHLVL|HOME|LD_ASSUME_KERNEL|LOGNAME|SSH_CONNECTION|LESSOPEN|HISTTIMEFORMAT|G_BROKEN_FILENAMES|_"|xargs`
    source env_variable_file
    

    Thanks!

  • Admin
    Admin over 13 years
    his unset 'env/awk' method worked just fine for me. bash 4.1.7.
  • mattdm
    mattdm over 13 years
    If you source the child script, yes. We are saying the same thing.
  • w00t
    w00t over 13 years
    may be an OS thing, RHE 4, bash 3.00.15.
  • w00t
    w00t over 13 years
    this one actually worked, ". script"