1

I'm trying to develop a small system app that is run as root. In this app, I would like to list all environment variables of the default user (not the $USER, but the user who calls runs the app as root, i.e. $SUDO_USER). Since the app runs not from a terminal and relies on a process opened by C in Qt environment, I would like to first prepare the environment, then get the environment variables in this subprocess.

What I'm trying to accomplish is equivalent to:

  • Change from root to user
  • source ~/.bashrc or ~/.profile etc.
  • printenv [and get it after the script]
  • Change to root again

There are some workarounds that I discovered and read online, but I found those workarounds (for running a command as another user) not helpful in what I'm trying to achieve.

I need a one-liner for the aforementioned task. What I have right now is given below (run as root):

sudo -i -u user sh -c '. /home/user/.bashrc && printenv > /tmp/user.env'

Although I'm able to see a few environment variables with this, I cant see the custom exported ones from /home/user/.bashrc

Any guidance is appreciated,

In case of missing information, please let me know.

Kind regards,

0

1 Answer 1

1

I've tried your command and it seems to me that it's working just find.

sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'

I've used the source command instead of .

With ~/.bashrc containing:

[ws] root ~ >cat /home/user1/.bashrc 
# .bashrc
...
export TESTENV="test"
...

execute your command and display the content of /tmp/user.env:

[ws] root ~ >sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'

[ws] root ~ >cat /tmp/user.env 
...
SHELL=/bin/bash
USER=user1
SUDO_COMMAND=/bin/bash -c sh -c source\ ~/.bashrc\ &&\ printenv\ >\ 
...
TESTENV=test
...
[ws] root ~ >
7
  • That is really weird. That is exactly what I tried right now and it doesnt seem to work for me. I'm using Ubuntu 16.04. I don't get the variables in ~/.bashrc Feb 7, 2018 at 18:45
  • I've tested it on CentOS. Feb 7, 2018 at 18:46
  • If you su - user1 and then printenv, do you see the env variables you want? Feb 7, 2018 at 18:47
  • Yes, that works. If I printenv when I'm user. Then, it works. Feb 7, 2018 at 18:48
  • But I need a one-liner that involves environment refresh Feb 7, 2018 at 18:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .