这让我很恼火。我看到了一些建议(都使用不同的文件和语法),但都没有用。

如何为特定用户设置环境变量?我正在使用debian squeeze。
我应该在文件中放入使ABC =“ 123”的确切语法是什么?

评论

您已经尝试了什么?

编辑.bashrc,.bash_profile,.profile和.ssh / environment。虽然我不知道我是每次写在正确的位置还是语法正确的

.bashrc是它的主要存放位置。

@rozcietrzewiacz:好的,但是...即使有解决方案,我也尝试在该文件的开头和结尾处设置ABC1和ABC2,并且未在我的环境中对其进行设置。

检查.bash_profile是否包含[[-f〜/ .bashrc]] &&之类的内容。 〜/ .bashrc。

#1 楼

您必须将声明放入外壳的初始化文件中:



如果使用的是bash,ash,ksh或其他Bourne风格的外壳,则可以添加

ABC="123"; export ABC


在您的.profile文件(${HOME}/.profile)中。在大多数Unix安装中,尤其是在Debian中,这是默认情况。

如果您的登录shell是bash,则可以改用.bash_profile${HOME}/.bash_profile)或.bash_login

注:如果存在这些文件中的任何一个,并且您的登录外壳为bash,则在通过ssh或在文本控制台上登录时不会读取.profile,但是如果您通过ssh登录,则可能仍会读取它而不是.bash_profile从GUI登录。另外,如果没有.bash_profile,请使用.bashrc。 ,在~/.zprofile文件(~/.profile)中添加

setenv ABC "123"




如果您使用的是其他Shell,请查看Shell手册中如何定义环境变量,以及在外壳启动时执行哪些文件。


评论


su用户的默认行为是将当前shell的所有权更改为用户名arg,同时保留调用用户的主目录和环境。要以某种方式成为新用户进入shell并获取其所有环境设置($ PATH,$ HOME,$ ABC等),您需要传递-作为su的第一个参数。 su-用户名将满足您的要求。

–蒂姆·肯尼迪
2011-09-28 11:35



等待:“退出root”是什么意思?在任何情况下,执行“ su”都不会初始化外壳。您需要“ su-”(请参阅​​man su)

–马特奥
2011-09-28 11:43

你为什么首先su?您是否只是创建了用户无法使用的根目录拥有的.profile?

–rozcietrzewiacz
2011-09-28 11:50

@acid这是应该做的。问题是,登录时来源是什么。要进行检查,请先注销。

–rozcietrzewiacz
2011-09-28 11:55



由于.profile被所有Bourne兼容的shell读取,因此您不应在该文件中写入Bash语法。特别是,导出VARIABLE = value需要重构为VARIABLE = value;导出变量。

–tripleee
2013年6月6日下午6:56

#2 楼

使用/etc/environment文件设置环境变量。然后将以下行添加到/etc/environment文件中。要测试变量输出,请先使用命令

ABC="123"


刷新环境变量,然后运行echo $ABC

评论


+1表示源命令。所有答案都没有

–神经
13年3月29日在14:16

注意/ etc / environment不支持完整的bash语法,这是我很难解决的问题。例如,将PATH =“ / usr / bin:/ usr / sbin”放在下面的行中,然后再执行PATH =“ $ PATH:/ foo / bar”将不起作用

–user2428118
16年5月13日在14:20



不确定这是个人问题还是其他原因,但是即使在重新启动bash终端或键入源/ etc / environment的情况下,也必须在/ etc / environment中进行设置后重新启动操作系统。因此,如果遇到环境变量无法永久保存的问题,请尝试重新启动。

– Blairg23
18年1月11日在1:04

问题是关于为单个用户设置它。我认为/ etc / environment适用于计算机上的所有用户。

–卡洛斯(Carolus)
19/12/30在10:54

#3 楼

这是一个通用过程,几乎可以用于任何shell。无论如何,您都必须知道用户通常使用哪个shell登录:

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"


然后必须弄清楚该shell通常会读取哪些点文件:

man $shell


一个可行的捷径是列出那些包含shell名称的点文件:

ls ~/.*${shell}*


如果要检查登录时是否真正读取了其中一个文件,则只需在每个文件中打印文件名,例如:

echo .bashrc


登录时,您应该然后看到正在读取的文件,然后可以决定修改哪个文件。注意,不要使用echo "[A-Za-z_][A-Za-z0-9_]*"或类似的东西,因为[A-Za-z0-9_]+的值取决于Shell处理点文件的方式,并且可能会产生误导。

在声明变量“永久性”时”,请注意,这仅适用于会话。没有会话就无法访问变量的值,因此它在一个变量之外没有任何意义。如果您的意思是“只读”(取决于外壳程序),则在Bash中可以使用:

declare -r VAR


如果它已经有值,或者

declare -r VAR=value


以同时分配它。并非所有外壳程序都具有此功能。

要在大多数外壳程序中声明变量,应使用变量名(q4312079q),后跟等号(等号周围没有空格),然后使用a值(最好引用,除非该值是一个简单的q4312079q)。例如:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1


#4 楼

使用export。

export ABC="123"


要检查是否已设置,请使用

env


和/或

env | grep ABC


要永久添加,请将其添加到您的~/.bashrc文件中。

export ABC="123"


评论


他想知道很热要永久定义它,即在哪个文件中放置定义。

–马特奥
2011年9月28日上午11:08

不起作用。一旦我注销,变量就消失了。我需要跨会议

–user4069
2011年9月28日上午11:08

你的意思是永久的,而不是永久的:D

–哇
2011-09-28 11:09

看看编辑bashrc

–哇
2011年9月28日上午11:12

怎么了?你是永久的吗?

–SSH此
2013年10月10日15:49

#5 楼

确切的命令是:

echo 'export ABC = "123"' >> ~/.profile


评论


究竟?认真吗什么外壳程序(a)读取〜/ .profile,而(b)允许在=之前和之后留出空间?

– G-Man说“恢复莫妮卡”
17年3月28日在17:20

#6 楼

对我有用的最好方法是在BASH shell中修改.bashrc文件。

使用此示例:


打开您的.bashrc文件

添加以下行:

export <VARIABLE> = "<ANY PATH/VALUE you want>"


例如:export HOME = "/home/user/"

请记住使用"",因为使用' '将不起作用,并且您的bashrc文件将在采购时报告错误。

在当前会话中获取它。

我也尝试修改/ etc / environment文件,但是它不允许我创建新的环境变量,当我获取它时,它提示错误,找不到定义的变量。