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

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


,但是它不起作用。它显示了所有以THEVAR为最后一个变量的变量,但是对env的另一个调用不再显示THEVAR-env | 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在修改后的环境中运行程序,然后取消所有更改。

评论

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

Google Earth和$ BROWSER环境变量的可能重复项

THEVAR = / example怎么样?

另一个是关于全局变量的,这个不增加这样的限制。我会分开的。

help.ubuntu.com/community/EnvironmentVariables

#1 楼

仅为当前shell设置变量:

VARNAME="my value"


为当前shell设置变量,并且所有进程都从当前shell开始:

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


要在以后的所有bash会话中对其进行永久设置,请将该行添加到.bashrc目录中的$HOME文件中。

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

sudo -H gedit /etc/environment


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

VARNAME="my value"


请勿在此处使用export关键字。

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

评论


通常建议使用Shell配置文件(例如〜/ .bashrc,〜/ .bash_profile和〜/ .bash_login)来设置环境变量。虽然这对于从Shell启动的程序在Bash Shell上可能有效,但是默认情况下,在这些文件中设置的变量对于桌面会话中从图形环境启动的程序不可用。 help.ubuntu.com/community/EnvironmentVariables

– SudoSURoot
15年8月22日在8:38

@海德先生,是的,这可能是一个合理的地方

–MichałŠrajer
15年12月7日在16:55

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

–MichałŠrajer
16年3月18日在17:19

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

–杆
18-09-27在13:54



@Rod echo $ myvar

– Qwerty
18-10-16在12:35

#2 楼

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

$ export THEVAR=/example


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

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

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

有关源代码执行与执行代码之间区别的说明,请参见以下答案:https://superuser.com/questions/176783/what-is-the-执行bash脚本与采购bash脚本之间的差异/ 176788#176788

评论


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

–秘银
17年11月9日在1:53



#3 楼

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


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


评论


我已经清理了您的答案,删除了有关sudo gedit(请参阅askubuntu.com/questions/270006/…)和chmod 777的更危险的内容。绝对不要在系统配置文件上执行chmod 777。

–muru
2014年12月8日13:45

对于某些情况,这是正确的答案。所有会话,无论是否使用用户shell会话,都将获取此处设置的变量的值。重要的是要注意,尽管这看起来像是一个shell脚本,但事实并非如此-它仅允许您设置环境变量(与使用诸如if或test之类的shell函数相比)

–汤姆·哈里森(Tom Harrison Jr)
16年9月9日在18:44

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

– blue_chip
16年11月10日在17:33

@blue_chip不,不带引号的作品。

–单击升级
17年1月10日在3:20

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

–俄罗斯
17年2月3日在14:40

#4 楼

若要使环境/ var更改在脚本完成后得以保留,您必须使用source ./script.sh或源代码“。”的简写表示法,例如. ./script.sh

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

评论


这是一个非常老的问题,已经有一个公认的答案,还有一些其他问题...考虑一下,请回答最近的问题...

–NerdOfCode
18年3月16日在18:13

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

–詹娜♦
18 Mar 27 '18 at 20:08

这正是我要找的东西。我需要从脚本中看出从脚本中导出的变量。

– albanx
19年3月11日在13:01

@NerdOfCode在地球上,您如何阻止某人提供其他信息?这个答案解决了我所有的问题!

–卢卡·法乔利(Luca Fagioli)
4月2日7:59

#5 楼

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

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

2)附加到文件:

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

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

评论


这帮助我修复了〜/ .bashrc。就像您说的那样,它看起来必须是PATH = $ PATH:/ bin,我有$ PATH:/ bin = PATH,它似乎可以正常工作,但是出现了错误。

–sdexp
19/12/30在11:01

#6 楼

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

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


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

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


#7 楼

如果要使用TOMCAT部署JAVA应用程序,则可以通过以下方式设置环境变量:
1.sudo su和cd到/ var / lib / tomcat8 / bin /(或您的tomcat bin路径中的任何一个)


触摸setenv.sh(如果不存在),如果已经存在文件,请执行'vi setenv.sh'


chmod 777 setenv.sh(使文件可执行)


vi setenv.sh并在setenv.sh中设置以下行
export key = value


sudo systemctl重新启动tomcat.service


在您的Java文件中,您可以使用以下代码检查变量是否已设置
private static void printEnv() {
    System.out.println("******************************Environment Vars*****************************");
    Map<String, String> enviorntmentVars = System.getenv();
    enviorntmentVars.entrySet().forEach(System.out::println);

    System.out.println("******************************system Vars*****************************");
    Properties enviorntmentProperties = System.getProperties();
    enviorntmentVars.entrySet().forEach(System.out::println);
}