bash - su и $HOME

bash - su и $HOME

Предположим, у нас есть два пользователя: 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

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