sudo, runuser, su не работают так, как я ожидал, при запуске от имени root с командой «echo $HOME»

sudo, runuser, su не работают так, как я ожидал, при запуске от имени root с командой «echo $HOME»

При запуске этих команд выводится следующее. /root

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

Я ожидал, что

/home/someuser

Когда я запускаю команду env для проверки среды, она правильно сообщает переменную HOME.

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

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

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

Я хочу запускать скрипты в домашнем каталоге пользователя. /home/someuser/scripts.
как ${HOME}/scripts/somescript.sh

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

Я ожидал следующее:

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

решение1

Касательно связано:

sudo -u someuser -i "echo $HOME"

У меня вообще не работает. Там написано:

-bash: echo $HOME: command not found

К делу: Когда вы выполняете команду

sudo -u someuser -i echo $HOME

переменная $HOMEрасширяется оболочкой еще до того, как sudo будет выполнено.

Чтобы решить эту проблему, вы можете использовать команду вроде

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

В этой команде echo $HOMEпроисходит отправка буквально в bash после переключения UID.

Результат ожидаемый:

/home/someuser

решение2

Когда ты это сделаешь

 su - someuser -c "echo $HOME"

Theтекущийоболочка расширяет $HOMEпервый, затем результат передается команде ( suв данном случае) и оттуда процессу оболочки, запущенному от имени нового пользователя.

Попробуйте защитить переменную одинарными кавычками.

 su - someuser -c 'echo $HOME'

Связанный контент