如何在 Linux 中永久设置环境变量

Posted

技术标签:

【中文标题】如何在 Linux 中永久设置环境变量【英文标题】:How to set environment variable in Linux permanently 【发布时间】:2022-01-17 01:32:34 【问题描述】:

如何在 Linux 中永久设置新的环境变量及其值

我使用export 设置环境变量。但问题是它的特定会话。如果我打开新会话,则设置的值将消失。 提前谢谢你

【问题讨论】:

将它们放入 /etc/environ 并重新启动。不过,有些服务可能会在 clean 环境下运行。这取决于服务 将它设置在你的 ~/.bashrc 用于 bash 或 ~/.zshrc 用于 zsh。 @dlmeetei 这将是特定于 shell 的。 /etc/environ 是正确的地方 @hek2mgl,正确。这些只是例子。我没有回答,因为这应该交给超级用户,不需要重新启动。只需sudo source /etc/environ 这个question的可能重复 【参考方案1】:

将其设置为/etc/environment。在我的 Ubuntu 安装中,这是您可以持久设置环境变量的地方。对于不同的发行版,该文件可能会有所不同。以下是我的/etc/environment 文件的内容。

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

看看上面是如何设置环境变量PATH的。

关于导出命令的说明

export varname 使变量 varname 可用于从当前 shell 运行的任何子 shell,即运行 export 命令的 shell。与您当前的 shell 无关或是父 shell 的任何其他 shell 都不会具有此变量。知道了这一点,假设您使用的是 bash shell,您可以在.bashrc 文件中编写导出命令。 .bashrc 是一个每次启动 bash shell 时都会运行的文件,因此您在其中编写的任何命令都会在打开的任何 bash shell 中执行。因此,在.bashrc 文件中写入导出命令是另一种选择。您正在使用的任何其他 shell 的过程也将类似。例如。对于 Z shell,文件是 .zshrc。

【讨论】:

它的狂欢。唯一的问题是我无权访问任何文件 ~/.bash_profile、.bashrc 和/etc/environment。是否仍然可以使用不依赖会话的命令设置路径? 您如何访问会话?通过 ssh?另外,用您的这个要求更新您的问题。它会极大地影响答案。 嗨 Sahil,我的要求是我有一台负载生成机器,对文件夹的访问最少。我想设置环境变量,以便我可以参数化测试数据路径。 什么是生成机?【参考方案2】:

通常的位置是~/.bashrc,假设您使用的是 bash,这是大多数发行版中的默认设置。用echo $SHELL检查自己。 如果您只想在登录 shell 中设置变量(但即不在脚本中),您可以使用 ~/.bash_profile

【讨论】:

它的狂欢。唯一的问题是我无权访问任何文件 ~/.bash_profile、.bashrc 和/etc/environment。是否仍然可以使用不依赖会话的命令设置路径? 如果您甚至无法访问$HOME 中的文件,您将需要每次重新设置它们或将它们包含在任何脚本中。如果您有类似/myapp/ 可写的路径,您可以使用/myapp/vars 并将source /myapp/vars 包含到您的脚本中。 (注意 vars 中的语法错误,这些错误将包含在您的脚本中!)【参考方案3】:

有一个很好的解释什么时候把它放在这里: http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html 如果您没有 root 访问权限,请将其放在本地,例如 .bash_profile 或取决于您使用的 shell。输入命令 ps 找到你的 shell。

【讨论】:

【参考方案4】:

感谢以上答案, 设置环境变量取决于您要设置为用户会话还是超级用户会话。

1) 在您选择的环境中输入此命令:

 $ ls -a

2) 您将看到所有缓存的文件以及它们之间: .bashrc

3) 在您喜欢的编辑器中打开此文件,例如:

 $ nano .bashrc

4) 然后在文件末尾添加您的个性化变量,如下所示:

 export YOURVARIABLE="/home/"$USER"/YOURPATHFOREXAMPLE"

5)然后保存并关闭并打开终端,检查你的变量是否已经设置:

$ echo $YOURVARIABLE
[output ->] /home/the-user-name/YOURPATHFOREXAMPLE

【讨论】:

在第 4 点中,最好添加 .bashrc 需要重新加载,使用 : "source .bashrc" ,考虑到您与 .bashrc 处于同一个 cwd 中。 不错@PedroGomes +1 @PedroGomes 很好,marcdahan 我认为你应该编辑你的答案并添加他的建议【参考方案5】:

这是在 Debian 11 中运行的。它应该在其他基于 Debian 的发行版上运行,比如 Ubuntu 等。我正在使用老式 nano 来编辑位于 /etc/security/ 目录中的名为 pam_env.conf 的文件,你可以使用其他任何东西你想要而不是 nano。

sudo nano /etc/security/pan_env.conf

在该文件中设置环境变量的格式如下:

VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]]

(例如,让我们将 DXVK_HUD 变量设置为值 full。这相当于 export DXVK_HUD=full 您可以将变量名称及其值替换为您的用例所需的任何值。)

这是在该文件中作为新行查看的方式:

DXVK_HUD DEFAULT=full OVERRIDE=full

通过保存来进行更改(CTRL+O 组合键用于通过 nano 进行更改)。然后按回车键(回车键)。然后按CTRL+X退出nano。

重新启动系统。并在终端中输入env,看看你是否可以在列表中看到你的环境变量。它应该在那里。

【讨论】:

【参考方案6】:

解决方案:为了在 linux 上导出和保持环境变量持久化,您应该将变量 decelration 导出到以下文件之一:~/.bash_profile/~/. bash_login/~/.profile

当 bash 作为交互式/非交互式登录 shell 调用时,它首先从文件 /etc/profile(如果存在)读取并执行命令,然后查找以下文件(按此顺序并执行相同操作)@ 987654325@, ~/. bash_login, ~/.profile.

示例:将秘密令牌添加到我的用户个人资料中。

cat << End >> ~/.profile
export SECRET_TOKEN=abc123!@#
End

输出:

echo $SECRET_TOKEN
abc123!@#

【讨论】:

以上是关于如何在 Linux 中永久设置环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Linux-配置环境变量

linux下修改环境变量问题

source命令 与 设置环境变量的四个文件 (设置永久环境变量)

Linux下设置和查看环境变量

linux环境设置

linux环境设置