如何设置用户环境变量? (永久,非会话)

如何设置用户环境变量? (永久,非会话)

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

如何为特定用户设置环境变量?我在 Debian 上挤压。我应该在文件中放入 ABC = "123" 的确切语法是什么?

答案1

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

  • 如果您使用 bash、ash、ksh 或其他一些 Bourne 风格的 shell,您可以添加

    ABC="123"; export ABC
    

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

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

    笔记:如果这些文件中的任何一个存在并且您的登录 shell 是 bash,则.profile当您通过 ssh 或在文本控制台上登录时不会读取该文件,但.bash_profile如果您从 GUI 登录,则可能仍会读取该文件。另外,如果没有.bash_profile,则使用.bashrc

  • 如果您已将 zsh 设置为登录 shell,请使用~/.zprofile代替~/.profile

  • 如果您使用 tcsh,请添加

    setenv ABC "123"
    

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

  • 如果您使用其他 shell,请查看 shell 手册,了解如何定义环境变量以及在 shell 启动时执行哪些文件。

答案2

使用/etc/environment文件设置环境变量。然后在文件中添加以下行/etc/environment

ABC="123"

现在ABC变量可以从所有用户会话访问。要测试变量输出,首先使用命令刷新环境变量

source /etc/environment

并运行echo $ABC

答案3

这是一个通用过程,几乎可以用于任何 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 的,并且在重击您可以使用:

declare -r VAR

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

declare -r VAR=value

同时分配它。并非所有 shell 都具有此功能。

要在大多数 shell 中声明变量,您应该使用变量名 ( [A-Za-z_][A-Za-z0-9_]*),后跟等号(和没有空间等号周围),然后是一个值(最好加引号,除非该值是简单的[A-Za-z0-9_]+)。例如:

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

答案4

确切的命令是:

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

相关内容