全局变量,但仍然可以';linux中的t访问

全局变量,但仍然可以';linux中的t访问,linux,unix,shell,ant,Linux,Unix,Shell,Ant,我试图在我的ant文件中使用一些全局变量。 当我通过终端登录时。我可以访问那些变量,如JAVA\u HOME 但当我试图通过ant命令访问变量时,我无法找到它们。 在.cshrc中声明的全局变量 setenv JAVA_HOME jdk_full_path 使用变量的ant代码 <property environment="env"/> <property name="ear" value= "true"/> <property name="home" value

我试图在我的ant文件中使用一些全局变量。 当我通过终端登录时。我可以访问那些变量,如
JAVA\u HOME
但当我试图通过ant命令访问变量时,我无法找到它们。 在.cshrc中声明的全局变量

setenv JAVA_HOME jdk_full_path
使用变量的ant代码

<property environment="env"/> <property name="ear" value= "true"/> <property name="home" value="${env.HOME}"/> <property name="java_home" value="${env.JAVA_HOME}"/> 我可以访问home变量,但是我找不到
JAVA\u home
变量,我正在通过eclipse执行这个ant


请建议我在哪里声明变量以便访问它们

问题可能是Eclipse的环境中没有
JAVA\u HOME

尝试注销并重新登录,然后运行Eclipse


或者,打开一个终端,然后从那里运行Eclipse。

只有在启动新的C shell时才运行.cshrc文件,它不适用于全局变量。因为您不是从C shell启动Eclipse,所以它不会看到您在那里设置的任何变量


尝试~/.login文件或/etc/profile文件,以防eclipse使用bash启动。这两个文件在用户登录时只加载一次,因此它们应该会影响所有内容。要使这些文件的更改生效,您可能需要重新启动或甚至重新启动。

环境变量是通过进程执行继承的,它们不是全局变量。因此,当您编辑shell的RC文件以添加变量时,它仅对修改后执行的shell以及从这些shell执行的程序生效。如果您从KDE/Gnome启动Eclipse,并且KDE/Gnome是在您进行更改之前启动的,那么KDE/Gnome从来没有定义过,因此Eclipse也没有


我建议注销并重新登录。此外,根据默认的shell设置,您可能会发现KDE/Gnome是通过bash或其他方式启动的,这意味着您需要修改.bashrc而不是.cshrc。

您应该在以下文件之一定义此变量:

~/.profile或~/.bash\u profile仅在您首次登录系统时使用登录shell运行

~/.bashrc文件在每次打开新的非登录bash shell(如xterm)时都会运行

因此,您应该在此文件中添加以下行:

导出JAVA\u HOME=jdk\u完整路径


您必须重新登录才能进行更改take efect

哇,我从来没有想过这样做会奏效。从终端启动是否有解决此问题的永久解决方案,因此当我直接启动eclipse时,这些变量也会被加载。如果您已将它们添加到
.cshrc
文件中,则在您登录时,它们将被添加到桌面会话的环境中。然后,如果您运行Eclipse(或者使用启动器,或者打开终端并从那里运行),变量将向下传播到Eclipse。在您注销并再次登录之前,您必须打开一个终端,该终端将获取新变量,并从那里运行Eclipse。您所说的是在shell登录脚本中设置的环境变量。对于环境变量,没有“全局”的概念:每个进程都有自己的环境(它通常但不总是从父进程继承),然后可以在不影响任何其他进程的情况下更改其核心内容。