如何添加环境变量?

huf*_*uff 550 bash

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

$r@hajt:~$ env THEVAR=/example
Run Code Online (Sandbox Code Playgroud)

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

同样,带有导出 ( export THEVAR=/example) 或其他变量赋值 ( THEVAR=/example) 的脚本不会添加环境变量。

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

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

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

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

Mic*_*jer 848

仅为当前 shell设置变量:

VARNAME="my value"
Run Code Online (Sandbox Code Playgroud)

为当前 shell 和从当前 shell 启动的所有进程设置它:

export VARNAME="my value"      # shorter, less portable version
Run Code Online (Sandbox Code Playgroud)

要为所有未来的 bash 会话永久设置它,请将这样的行添加到您.bashrc目录中的文件中$HOME

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

sudo -H gedit /etc/environment
Run Code Online (Sandbox Code Playgroud)

该文件只接受变量赋值,如:

VARNAME="my value"
Run Code Online (Sandbox Code Playgroud)

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

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

  • `通常建议使用 ~/.bashrc、~/.bash_profile 和 ~/.bash_login 等 Shell 配置文件来设置环境变量。虽然这可能适用于从 shell 启动的程序的 Bash shell,但默认情况下,这些文件中设置的变量对于从桌面会话中的图形环境启动的程序不可用。` https://help.ubuntu.com/community/EnvironmentVariables (54认同)
  • @Rod `echo $myvar` (3认同)

les*_*ana 42

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

$ export THEVAR=/example
Run Code Online (Sandbox Code Playgroud)

该变量将为 shell 会话的其余部分设置或直到未设置。

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

要从脚本设置环境变量,请使用脚本中的export命令,然后source使用脚本。如果您执行该脚本,它将不起作用。

有关采购和执行之间区别的解释,请参阅此答案:https : //superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a- bash 脚本/176788#176788

  • 如何仅通过执行脚本使其工作?无需采购。 (5认同)

小智 23

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

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

  • 我已经清理了你的答案,删除了关于“sudo gedit”的更危险的部分(见 http://askubuntu.com/questions/270006/why-user-should-never-use-normal-sudo-to-start-graphical-应用程序)和`chmod 777`。后者不应该在系统配置文件上完成。 (7认同)
  • @blue_chip 用于环境变量,一切都是字符串。仅当它包含空格时才需要引号。 (4认同)

小智 16

要在脚本完成后保留环境/var 更改,您必须使用source ./script.sh或 源代码的速记符号“.”,例如. ./script.sh

Source 将执行脚本中的命令,就像您输入它们一样......所以它确实改变了脚本的某些方面,例如退出......所以如果你的脚本检查了一些东西并决定在错误时退出,例如,通过调用exit 0,它将终止您当前的终端/shell 会话。

  • @NerdOfCode 这个答案解决了一个[仍然相关](https://askubuntu.com/questions/1019600/cannot-set-an-environment-variable-using-a-bash-script)的问题,没有其他答案,包括接受的那个,提到它,据我所知......实际上有两个徽章可以为旧问题提供良好的答案,所以鼓励这样做 (7认同)
  • @NerdOfCode 你怎么能阻止某人_提供额外信息_?这个答案解决了我所有的问题! (4认同)
  • 这正是我想要的。我需要从脚本中查看脚本导出的变量。 (2认同)

小智 10

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

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

2)附加到文件:

export VAR=path export PATH=$PATH:/bin 3)(如果你能弹回盒子就更好了) - 或者简单地打开一个新的 SSH 会话并使用 `env' 命令进行确认。

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


Shi*_*hah 7

如果您通过脚本做事,一种永久设置环境变量的简单方法是在脚本的下面语句中,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)

如果你需要评估像 pwd 这样的表达式,你可以使用它,例如,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)