如何为特定用户设置环境变量?我正在使用debian squeeze。
我应该在文件中放入使ABC =“ 123”的确切语法是什么?
#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文件,但是它不允许我创建新的环境变量,当我获取它时,它提示错误,找不到定义的变量。
评论
您已经尝试了什么?编辑.bashrc,.bash_profile,.profile和.ssh / environment。虽然我不知道我是每次写在正确的位置还是语法正确的
.bashrc是它的主要存放位置。
@rozcietrzewiacz:好的,但是...即使有解决方案,我也尝试在该文件的开头和结尾处设置ABC1和ABC2,并且未在我的环境中对其进行设置。
检查.bash_profile是否包含[[-f〜/ .bashrc]] &&之类的内容。 〜/ .bashrc。