2015-11-19 2 views
1

У меня есть скрипт bash и вам нужно выполнять команды как другого пользователя в скрипте. Но когда я переключаю пользователей, я заметил, что переменные среды не сбрасываются. Например, если я запускаю скрипт как user1 и переключаюсь на user2, переменная среды $ HOME по-прежнему относится к user1. Чего не хватает?Переменные среды при переключении пользователей в сценарии bash

#!/usr/bin/env bash 

whoami # Prints "user1" 
sudo -i -u user2 << EOF 
    whoami # Prints "user2" 
    echo ${LOGNAME} # Prints "user1", NOT "user2" 
    echo ${HOME} # Prints "/home/user1", NOT "/home/user2" as expected 
EOF 
whoami # Prints "user1" 

ответ

2

Переменные расширяются текущей оболочкой. Не оболочкой sudo. В оболочке sudo отсутствуют переменные, которые он видит буквальным текстом.

Вам необходимо предотвратить это. Либо цитируя некоторые или все маркер начала heredoc, либо избегая $ в содержимом heredoc.

Смежные вопросы