When I run these commands it outputs as shown. /root
$ sudo -u someuser -i "echo $HOME"
/root
$ runuser -l someuser -c "echo $HOME"
/root
$ su - someuser -c "echo $HOME"
/root
What i expected was
/home/someuser
When I run the env command to inspect the environment It reports the HOME variable correctly.
$ su - someuser -c "env"
...
HOME=/home/someuser
...
$ sudo -u someuser -i "env"
...
HOME=/home/someuser
...
$ runuser -l someuser -c "env"
...
HOME=/home/someuser
...
What I want to do is run scripts under the users home directory. /home/someuser/scripts.
as ${HOME}/scripts/somescript.sh
$ sudo -u someuser ${HOME}/scripts/somescript.sh
sudo: /root/scripts/somescript.sh: command not found
What i expected was:
$ sudo -u someuser ${HOME}/scripts/somescript.sh
...
script output.
...
Best Answer
Tangentially related:
doesn't work at all for me. It says:
To the point: When you execute the command
the variable
$HOME
gets expanded by the shell before sudo gets even executed.To solve this, you could use a command like
In this command,
echo $HOME
gets sent literally to bash after switching the UID.The result is as expected: