我发现在我的OSX系统上我有“怪异”的设置. Java将我的用户名读作“root”而不是我的实际用户名.原来我使用的代码使用System.getPropery(“user.name”)调用.所以,我编写了独立剪切(我将它保存在test.java下),它打印了java系统user.name属性和我的UNIX用户名环境:
class UserName {
public static void main(String[] args) {
String name;
name = System.getProperty("user.name");
System.out.println("user.name="+name);
name = System.getenv("USER");
System.out.println("USER="+name);
}
}
如果我将其编译为javac test.java然后运行它(在我的帐户下,而不是root用户)作为java UserName,它将打印以下内容:
user.name=root
USER=vk
我的问题是java在哪里/如何设置user.name以及为什么将它设置为root而不是我的实际UNIX名称.我不是Java专家,也不知道System.getProperty API的内部.
第二个问题是可以在UNIX环境中以某种方式更改此设置,以便正确读取我的用户名.
最后可能是我的环境或java配置被破坏,并且有一些应该修复的隐藏文件(属性).
解决方法:
通过关闭java可执行文件中的setuid位解决了该问题.谢谢大卫康拉德的正确提示.供参考:
ls -l /usr/bin/java
-rwsr-xr-x ... /usr/bin/java
sudo chmod -s /usr/bin/java
lrwxr-xr-x ... /usr/bin/java
之后一切都报告得当.