sudo, runuser, su no funcionan como esperaba cuando se ejecutan como root con el comando "echo $HOME"

sudo, runuser, su no funcionan como esperaba cuando se ejecutan como root con el comando "echo $HOME"

Cuando ejecuto estos comandos, el resultado es como se muestra. /raíz

$ sudo -u someuser -i "echo $HOME"
/root
$ runuser -l someuser -c "echo $HOME"
/root    
$ su - someuser -c "echo $HOME"
/root

Lo que esperaba era

/home/someuser

Cuando ejecuto el comando env para inspeccionar el entorno, informa la variable HOME correctamente.

$ su - someuser -c "env"
...  
HOME=/home/someuser
...

$ sudo -u someuser -i "env"  
...  
HOME=/home/someuser
...

$ runuser -l someuser -c "env"  
...  
HOME=/home/someuser
...  

Lo que quiero hacer es ejecutar scripts en el directorio de inicio de los usuarios. /home/algún usuario/scripts.
como ${HOME}/scripts/somescript.sh

$ sudo -u someuser  ${HOME}/scripts/somescript.sh
sudo: /root/scripts/somescript.sh: command not found  

Lo que esperaba era:

$ sudo -u someuser  ${HOME}/scripts/somescript.sh
...
script output.
...

Respuesta1

Relacionado tangencialmente:

sudo -u someuser -i "echo $HOME"

no me funciona en absoluto. Dice:

-bash: echo $HOME: command not found

Al grano: cuando ejecutas el comando

sudo -u someuser -i echo $HOME

$HOMEel shell expande la variable antes de que se ejecute sudo.

Para resolver esto, puedes usar un comando como

sudo -u someuser -i bash -c 'echo $HOME'

En este comando, echo $HOMEse envía literalmente a bash después de cambiar el UID.

El resultado es el esperado:

/home/someuser

Respuesta2

Cuando tu lo hagas

 su - someuser -c "echo $HOME"

Elactualshell expande $HOMEprimero, luego el resultado se pasa al comando ( suen este caso) y de allí a un proceso de shell que se ejecuta como el nuevo usuario.

Intente proteger la variable con comillas simples

 su - someuser -c 'echo $HOME'

información relacionada