我有一个通过.bashrc
设置的变量。
在~/.bashrc
:
PROJ_HOME=~/Projects/stable
从bash shell开始,我想做这样的事情:
$ su -l kenneth -c 'echo $PROJ_HOME'
但是,当我这样做时,预期的/home/kenneth/Projects/stable
不会打印出来。
关于我如何做到这一点的任何想法?
答案 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
的值将被回显。