Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java读取路径变量(在Mac OS X上的Eclipse中)与shell不同_Java_Eclipse_Macos_Shell_Environment Variables - Fatal编程技术网

使用Java读取路径变量(在Mac OS X上的Eclipse中)与shell不同

使用Java读取路径变量(在Mac OS X上的Eclipse中)与shell不同,java,eclipse,macos,shell,environment-variables,Java,Eclipse,Macos,Shell,Environment Variables,当我使用Java读取PATH环境变量时,通过: System.getenv("PATH"); 结果不如使用shell时全面,如: > echo $PATH 使用Java的结果: /usr/bin:/bin:/usr/sbin:/sbin 使用shell的结果: /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/texbin 为什么会这样?这是Ja

当我使用Java读取PATH环境变量时,通过:

System.getenv("PATH");
结果不如使用shell时全面,如:

> echo $PATH
使用Java的结果:

/usr/bin:/bin:/usr/sbin:/sbin
使用shell的结果:

/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/texbin

为什么会这样?这是Java还是shell的问题?如何在Java中检索完整的路径信息?我还需要注意些什么吗?

它们应该是完全相同的,特别是如果你说用户在两种情况下都被确认是相同的(Eclipse/Java JUnit函数+shell)。但是,如果您仅在shell中加载路径,而尚未保存在常规系统路径中,则仍然可能发生这种情况。您正在使用什么操作系统?

检查您的.bashrc/.bashprofile文件。 它必须定义了您在shell中看到的其他值

为什么会这样?这是Java还是shell的问题

没有。两个都正常工作。这是因为这两个进程(Java进程和shell)具有不同的环境,尤其是路径变量的设置不同

你可能会问为什么不同。最有可能的是,shell初始化修改了它的路径。这通常由
/etc/profile
~/.profile
等文件控制

要在Java程序(从Eclipse运行)中获得与shell中相同的环境,最简单的方法是从shell中运行Eclipse,而不是通过Finder GUI启动它。您还可以通过以下命令将外壳路径设置复制到启动设置:

launchctl setenv PATH $PATH
如何在Java中检索完整的路径信息


System.getenv(“PATH”)
检索Java进程的完整路径,该路径从父进程继承(或由父进程设置)。

如何运行该程序?您是否使用与shell上的echo相同的用户运行它?或者它是一个cron作业?您是否以相同的用户身份在shell中运行java代码和命令?是的,两者都使用相同的用户运行。我甚至在Java中通过使用
ProcessBuilder
运行
whoami
来确认这一点。没有cron作业。Java代码在Eclipse中作为JUnit测试用例运行。请使用
System.getProperty(“user.name”)
检查这听起来像是Eclipse问题,而不是shell问题。也许值得在这个问题上加上“eclipse”。您还可以尝试从命令行运行junit测试。我使用的是MacOS X,我只是尝试读取PATH变量,而不在shell上应用任何修改。是的,MacOS X的工作原理有点不同。您需要在~/.MacOSX/environment.plist中设置路径,以便Eclipse也可以读取它