你如何给当前用户环境变量su

时间:2012-05-07 20:36:00

标签: linux bash ubuntu

我有一个通过.bashrc设置的变量。

~/.bashrc

PROJ_HOME=~/Projects/stable

从bash shell开始,我想做这样的事情:

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

但是,当我这样做时,预期的/home/kenneth/Projects/stable不会打印出来。

关于我如何做到这一点的任何想法?

4 个答案:

答案 0 :(得分:14)

您是否尝试过选项su -m?

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

例如:su -m kenneth -c'echo $ PROJ_HOME'

答案 1 :(得分:8)

您需要导出变量。您可能不需要使用-m选项su来保护环境。

export PROJ_HOME=~/Projects/stable

答案 2 :(得分:6)

尝试使用su -m -l kenneth -c 'echo $PROJ_HOME'。 -m应该保护环境。

EDIT 再读一遍你的问题,我想我可能会理解它的逆转。 您也可以尝试这样做:su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME

答案 3 :(得分:-2)

在命令周围使用单引号:

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

双引号解释root(空字符串)所见的$PROJ_PATH的值,然后以用户kenneth执行命令"echo (empty string)"

单引号将'echo $PROJ_PATH'作为命令传递,而kenneth环境中$PROJ_PATH的值将被回显。

相关问题