如何添加环境变量?


363

我正在运行Ubuntu 11.04。我使用终端启动bash会话,我想添加一个环境变量:

$r@hajt:~$ env THEVAR=/example

但这不起作用。它显示了所有变量,其中THEVAR是最后一个变量,但是对的另一个调用env不再显示- THEVARenv | grep THEVAR返回任何内容。

同样,带有export(export THEVAR=/example)或其他变量分配(THEVAR=/example)的脚本也不会添加环境变量。

我知道我做错了什么,我知道应该做的很简单,但是我找不到。

更新:我的问题的真正含义是这样的:https : //stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(无论如何,我会选择投票最多的答案,并保留编辑后的标题-那不是我要的内容)

env 在修改后的环境中运行程序,然后取消所有更改。


1
在.bashrc中定义/导出时,它可以正常工作。
huff


1
怎么THEVAR=/example
Oleh Prypin 2011年

2
另一个是关于全局变量的,这个不增加这样的限制。我将其分开。
Lekensteyn 2011年

Answers:


569

仅为当前外壳设置变量:

VARNAME="my value"

要将其设置为当前外壳,并且所有进程都从当前外壳开始:

export VARNAME="my value"      # shorter, less portable version

要为以后的所有bash会话永久设置它,请将此行添加到目录中的.bashrc文件中$HOME

要永久设置它,并在系统范围(所有用户,所有进程)中,在/ etc / environment中添加set变量:

sudo -H gedit /etc/environment

该文件仅接受变量分配,例如:

VARNAME="my value"

不要在export此处使用关键字。

您需要从当前用户注销并再次登录,以便进行环境变量更改。


29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
SudoSURoot

1
@ Mr.Hyde是的,这可能是一个合理的地方
米哈尔Šrajer

1
@BharadwajRaju,因为在某些旧的UNIX系统上,只能导出已设置的变量。例如,旧的Solaris和HP-UX。
米哈尔Šrajer

1
设置环境变量后,如何快速查看它以确保已设置?
Rod

1
@Rodecho $myvar
Qwerty

29

要一次设置环境变量,请export在提示符下而不是在shell脚本中使用命令:

$ export THEVAR=/example

该变量将在其余的Shell会话中设置或直到未设置为止。

要每次都设置环境变量,请export.bashrc文件(或您的Shell适当的初始化文件)中使用命令。

要通过脚本设置环境变量,请在脚本中使用export命令,然后source在脚本中使用命令。如果执行脚本,它将无法正常工作。

有关采购与执行之间差异的说明,请参见以下答案:https : //superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a- bash-script / 176788#176788


4
如何仅通过执行脚本使它起作用?无需采购。
秘银

19

要在Ubuntu中永久添加新的环境变量(仅在14.04中进行了测试),请使用以下步骤:

  1. 打开终端(按CtrlAltT
  2. sudo -H gedit /etc/environment
  3. 输入密码
  4. 编辑刚打开的文本文件:
    例如,如果要添加FOO=bar,则只需FOO=bar在新行中编写
  5. 保存
  6. 保存后,注销并再次登录。
  7. 进行所需的更改。

5
我已经整理好您的答案,删除了有关和的更多危险信息sudo gedit(请参见askubuntu.com/questions/270006/…chmod 777。后者永远不要在系统配置文件上进行。
muru 2014年

对于某些情况,这是正确的答案。所有会话,无论是否使用用户shell会话,都将获取此处设置的变量的值。需要注意的是虽然这可能看起来像一个shell脚本是很重要的,它不是-它可以让你只设置环境变量(相对于使用像shell函数iftest
汤姆·哈里森JR

如果bar是字符串,是否应该将其放在引号之间?喜欢Foo="bar"吗?
blue_chip

@blue_chip不,不带引号的作品。
点击Upvote

4
@blue_chip用于环境变量,一切都是字符串。仅在包含空格的情况下才需要使用引号。
Ruslan

8

为了使环境/ var更改在脚本完成后得以持久,您必须使用source ./script.sh或简写形式来表示源“。”,例如. ./script.sh

Source将执行脚本中的命令,就像您在其中键入命令一样...因此它会更改脚本的某些方面,例如退出...,因此,如果您的脚本检查了某些内容并决定是否退出(例如,通过调用exit 0,它将终止您当前的终端/ Shell会话。


这是一个非常古老的问题,已经有一个公认的答案以及其他一些问题……考虑一下,请回答更多最近的问题……
NerdOfCode

3
@NerdOfCode这个答案解决的问题仍然相关的,据我所知,没有其他答案,包括已接受的答案,请提及它……实际上有两个徽章可用于为旧问题提供良好的答案,因此,这
值得

1
这正是我要找的东西。我需要从脚本中看出从脚本中导出的变量。
阿尔班克斯

5

如果您通过脚本执行操作,则一种简单的永久设置环境变量的方法会放在脚本中的语句下方,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

如果您需要评估pwd之类的表达式,则可以使用它,例如,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1

我知道已经很晚了,但是如果您想为所有用户添加一个环境变量(例如JAVA用法),则可以执行以下操作:

1)/etc/bash.bashrc使用nano 打开(您可以使用任何编辑器,我都不喜欢VIM,因为它在用户友好性方面是最差的-没什么私人的)。

2)附加到文件:

export VAR=path export PATH=$PATH:/bin 3)(最好是可以跳开方框)-或只是打开一个新的SSH会话并使用`env'命令进行确认。

但是,如果您希望每个用户对此都有一个单独的设置,则必须更改(脚本)下的.bashrc文件~/.bashrc(或者/home/$USER/如果您是Linux系统的新手)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.