2012-05-07 5 views
9

У меня есть переменная, которая установлена ​​через .bashrc.Как вы даете su текущие переменные окружения пользователя

В ~/.bashrc:

PROJ_HOME=~/Projects/stable 

С Баш оболочки, я хотел бы сделать что-то вроде этого:

$ su -l kenneth -c 'echo $PROJ_HOME' 

Однако, когда я делаю это, ожидаемый /home/kenneth/Projects/stable не распечатывается ,

Любые идеи о том, как я могу это сделать?

ответ

7

Вы должны экспортировать переменную. Возможно, вам не нужно использовать опцию -m для su, чтобы сохранить окружающую среду.

export PROJ_HOME=~/Projects/stable 
+0

Предполагая, что экспорт изменится на env vars root. «Su -m» сохраняет ROOT's env? или Кеннет? – 8None1

+0

@ 8None1: Согласно странице руководства: «Сохраните текущую среду ...». Это означает, что среда пользователя, вызывающая 'su' (предположительно, kenneth's-root не участвует на основе какой-либо информации в вопросе). –

6

Попробуйте с su -m -l kenneth -c 'echo $PROJ_HOME'. -m следует сохранить окружающую среду.

EDIT Повторное рассмотрение вашего вопроса, я думаю, я мог бы понять его обратное. Вы также можете попробовать следующее: su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME.

8

Вы пробовали вариант su -m?

-m, --preserve-environment 
       do not reset environment variables 

Например: су -m кеннет -c 'Эхо $ PROJ_HOME'

+5

Хм, спасибо за ответ, но кажется, что он не работает. '$ su -m kenneth -c" echo $ PROJ_PATH "'. Я получаю пустую строку. –

-1

Используйте одинарные кавычки вокруг команды:

$ su -l kenneth -c 'echo $PROJ_PATH' 

двойные кавычки интерпретирует значение $PROJ_PATH как видно на корню (пустая строка), а затем выполняет команду "echo (empty string)" как пользователь Кеннета.

Одиночные кавычки передадут 'echo $PROJ_PATH' в качестве команды, а значение $PROJ_PATH в среде kenneth - это то, что будет отражено.

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