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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10488758/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-06 06:12:46  来源:igfitidea点击:

How do you give su the current user environment variables

linuxbashubuntu

提问by kenneth koontz

I have a variable that is set through .bashrc.

我有一个通过.bashrc.

In ~/.bashrc:

~/.bashrc

PROJ_HOME=~/Projects/stable

From a bash shell, I'd like to do something like this:

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

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

However, when I do this, the expected /home/kenneth/Projects/stableis not printed out.

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

Any ideas on how I can do this?

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

采纳答案by Paused until further notice.

You need to export the variable. You may not need to use the -moption to suto preserve the environment.

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

export PROJ_HOME=~/Projects/stable

回答by Carlo

Try with su -m -l kenneth -c 'echo $PROJ_HOME'. -m should preserve the environment.

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

EDIT Reading your question one more time, I think I might understood it reversed. You might also try this: su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME.

编辑再读一遍​​你的问题,我想我可能理解它反过来了。你也可以试试这个:su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME

回答by Dan V

Have you tried the option su -m ?

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

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

For example: su -m kenneth -c 'echo $PROJ_HOME'

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

回答by Earl Ruby

Use single quotes around the command:

在命令周围使用单引号:

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

Double quotes interprets the value of $PROJ_PATHas seen by root (empty string), then executes the command "echo (empty string)"as the user kenneth.

双引号解释$PROJ_PATHroot 看到的值(空字符串),然后"echo (empty string)"以用户 kenneth 的身份执行命令。

Single quotes will pass 'echo $PROJ_PATH'as the command, and the value of $PROJ_PATHin kenneth's environment is what will be echoed.

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