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
$HOME
el 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 $HOME
se 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 ( su
en 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'