Предположим, у нас есть два пользователя: user1 (администратор) и user2 (стандартный пользователь).
- Войти как пользователь1
Бегать
sudo su - user2 -c "env"
Результат показывает $HOME=/home/user2
Бегать
sudo su - user2 -c "echo $HOME"
Результат показывает $HOME=/home/user1
Почему это?
решение1
Это происходит потому, что во втором примере переменная $HOME
раскрывается до того, как оболочка выполняет команду, поэтому на самом деле вы запускаете
sudo su - user2 -c "echo /home/user1"
поскольку это значение переменной $HOME
в данный момент.
(Я также предполагаю, что вывод второй команды на самом деле не является $HOME=/home/user1
, а вместо этого просто /home/user1
).
Вы можете предотвратить расширение переменных в первой оболочке, если используете одинарные кавычки:
$ sudo su - user2 -c 'echo $HOME'
/home/user2