如何设置一个用户环境变量?(永久的,不是会话)

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

我如何为一个特定的用户设置一个环境变量?我是在debian squeeze上。 我应该在文件中加入什么确切的语法来使ABC="123"?

解决办法

你必须把这个声明放在你的shell的初始化文件中。

  • 如果你使用bash、ash、ksh或其他Bourne风格的shell,你可以加入

     ABC="123"; export ABC

在你的".profile "文件(${HOME}/.profile)中。这是大多数Unix装置的默认情况,特别是在Debian上。

如果你的登录外壳是bash,你可以使用.bash_profile${HOME}/.bash_profile)或.bash_login来代替。

注意:如果这两个文件都存在,并且你的登录外壳是bash,那么当你通过ssh或文本控制台登录时,.profile不会被读取,但如果你从GUI登录,它仍然可能被读取,而不是.bash_profile。另外,如果没有.bash_profile,则使用.bashrc

  • 如果你将zsh设置为你的登录shell,使用~/.zprofile而不是~/.profile

  • 如果你使用的是tcsh,请添加

     setenv ABC "123"

.login文件(${HOME}/.login)中

  • 如果你使用的是其他shell,请看shell手册中如何定义环境变量以及哪些文件在shell启动时被执行。
评论(12)

这是一个一般的程序,你可以用于几乎所有的shell。在任何情况下,你都必须知道用户通常会用哪个shell登录。

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

然后,你必须弄清楚这个shell通常会读取哪些点文件。

man $shell

一个可能有用的捷径是列出那些包含shell名称的点文件。

ls ~/.*${shell}*

如果你想检查其中一个文件在登录时是否真的被读取,你可以简单地打印其中的文件名,比如说。

echo .bashrc

当登录时,你应该看到哪些文件被读取,你就可以决定修改哪个文件了。注意,你不应该尝试使用echo "$0"或类似的方法,因为`$0'的值取决于shell如何处理点文件,可能会产生误导。

当涉及到声明变量"永久"时,请注意这只延伸到会话。在没有会话的情况下,没有办法访问变量的值,所以它在会话之外没有任何意义。如果你指的是"只读",那是依赖于shell的,在Bash中你可以使用。

declare -r VAR

如果它已经有了一个值,或者

declare -r VAR=value

来同时分配它。不是所有的壳都有这个功能。

在大多数shell中声明一个变量,应该使用一个变量名([A-Za-z_][A-Za-z0-9_]*),后面是一个等号(等号周围不能有空格*),然后是一个值(最好有引号,除非这个值是一个简单的[A-Za-z0-9_]+)。比如说

name="John Doe"
ip=127.0.0.1
HORRIBLE=1
评论(0)

使用出口。

export ABC="123"

要检查它是否被设置,请使用

env

和/或

env | grep ABC

要永久添加它,请将此添加到你的~/.bashrc文件中。

export ABC="123"
评论(6)