如何设置环境变量?

我正在尝试在我的电脑上设置Apache Tomcat,并且它要求我设置一个环境变量CATALINA_HOME。有人知道如何做吗?
7个回答


11对于会话级别的变量,http://help.ubuntu.com建议使用`~/.profile`作为最佳选择来放置环境变量赋值,因为它在启动过程中由DisplayManager自动执行,并且在从文本控制台登录时也由登录shell执行。 - McDowell
更新了答案。我之所以使用.bashrc,是因为某个时候.profile没有自动加载。但如果现在正常工作了,最好还是使用它。 - Ressu
7将其设置在~/.profile中对我来说不起作用。但是在~/.bashrc中可以正常工作。 - jumpnett
2将其设置在~/.bash_profile中也可以起作用。 - jumpnett
还有一个系统范围的文件在/etc目录下。这个文件是按用户设置的,虽然能够正常工作。 - wheredidthatnamecomefrom
1需要注意的是,当你在~/.bash_profile中添加新的变量时,它们不会自动设置到环境中,直到下次登录。请参考man bash,并查找INVOCATION以获取更多详细信息。 - SR_
没有export,我们也可以使用任何编辑器来编辑bash脚本并手动添加路径,对吗?例如,vim ~\.bashrc - bim

在最新的Ubuntu版本(从14.04及以上)中设置永久环境变量,将变量添加到/etc/environment文件中。按照以下说明进行操作:
打开终端并运行
sudo -H gedit /etc/environment

提供您的密码,然后在提示的文本文件中。
然后添加变量,例如。
ANT_HOME="/opt/ANT/"

以下是/etc/environment的示例。
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
JAVA_HOME="/usr/lib/jvm/java-8-oracle/"
AXIS2_HOME="/opt/axis2-1.7.4/"
ANT_HOME="/opt/apache-ant-1.9.7/"

不要忘记注销并重新登录以启用环境变量。

环境变量应该已经生效

如果您使用的是来自Ubuntu软件仓库的tomcat6软件包,那么CATALINA_HOME和其他环境变量已经在/etc/init.d/tomcat6启动脚本中设置好了。

如果您在软件包管理器之外安装tomcat(希望安装在/opt或其他受控文件系统之外的位置),那么运行TOMCAT/bin/startup.sh应该使用相对路径来定义CATALINA_HOME。

设置环境变量

如果出于某种原因您仍然需要设置环境变量,您可以打开一个终端窗口并输入以下命令:

export CATALINA_HOME=/path/to/the/root/folder/of/tomcat

这个环境变量现在只在该终端窗口中生效,但是如果你打开另一个窗口或者注销/登录,你就会失去这个设置。

将环境变量设置为永久

要使环境变量设置永久生效,有几个地方可以定义该设置。

为了确保设置被正确加载,请将以上设置添加到Tomcat的启动脚本之一中。

yourtomcatfolder/bin/startup.sh

yourtomcatfolder/bin/catalina.sh

注意:startup.sh调用catalina.sh。您应该在这些文件的开头添加设置(在任何初始注释之后)。
全局环境变量的标准方法是在/etc/environment中添加条目(在此文件中不使用export命令,因为它不是一个普通的bash脚本)。
CATALINA_HOME=/path/to/the/root/folder/of/tomcat

不推荐使用

您可以在bash(命令行shell)配置文件中设置环境变量,但是这种方法并不推荐,因为它们并不总是被识别(例如,如果您正在运行一个无需登录即可运行Tomcat的服务器): ~/.bashrc | ~/.profile | /etc.bash.bashrc | /etc/profile


5不应该使用startupcatalina脚本,而应该使用setenv.shsetenv.bat脚本,如果需要的话需要创建它。"除了CATALINA_HOME和CATALINA_BASE之外,所有的环境变量都可以在“setenv”脚本中指定。该脚本放置在CATALINA_BASE/bin或CATALINA_HOME/bin目录中,并命名为setenv.bat(在Windows上)或setenv.sh(在*nix上)。该文件必须可读取。" (Running The Apache Tomcat 7.0 Servlet/JSP Container,第3.4节) - Olathe

打开你的Bash运行文件:

runcom

nano ~/.bashrc

这很可能已经包含了相当多的数据。这里大部分的定义是用于设置bash选项,与环境变量无关。你可以像从命令行一样设置环境变量:
export VARNAME=value

查看如何在Linux上读取和设置环境变量和Shell变量

我在Ubuntu 16.04上进行了测试。效果很好。


这取决于您如何安装Tomcat以及您想要在哪些应用程序中使用此设置以及您希望范围有多广的最佳位置。 Ubuntu环境变量文档讨论了各种选项的优缺点。

你说“最适合这个的地方”是指什么? - jumpnett
@jumpnett - 我的意思是要将设置持久化,这样它就能随时为依赖它的应用程序提供服务。除非你愿意每次都手动输入设置或者想要编写自己的脚本。 - McDowell

在查阅了Ubuntu环境变量文档后,我提出了以下解决方法:

##Save & run the following in a shell script,

export ENVIRON_VAR_NAME = Value
# any other initializations like
export PATH=$PWD:$PATH
bash

最后一行创建了一个子shell,该子shell继承了父shell中的环境变量值(这些值刚刚被设置)。

如上所述,我将使用导出功能来保存一个环境变量,只是有一点小差别。我更喜欢将它们保存在本地文件中。
echo "export POSTMARK_SERVER_TOKEN=sekritvalue" >> .env

以这种方式,无论何时何地,您的变量都将与您的项目一起工作并存在。不要忘记将.env添加到.gitignore中,不要将它们推送到Git。