При запуске этих команд выводится следующее. /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'