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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.