4

如果以下命令显示 user.dir 设置为“.”,那么在 UNIX 环境中会出现什么问题?

/home/user> $ANT_DIR/bin/ant -diagnostics | grep dir
user.dir : .

如果我在不同的计算机上运行此命令 - user.dir 设置为当前目录:

/home/user2> $ANT_DIR/bin/ant -diagnostics | grep dir
user.dir : /home/user2

Java 也不起作用。

/home/user> java -cp .:$CLASSPATH test
Exception in thread "main" java.lang.NoClassDefFoundError: test
Caused by: java.lang.ClassNotFoundException: test
        at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:653)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
Could not find the main class: test.  Program will exit.

将当前目录添加到类路径。

/home/user> java -cp /home/user:$CLASSPATH test
Hello World!

如您所见,只有当我将当前目录而不是“.”添加到类路径时,java 才找到测试类。

据我了解,某些 unix 环境变量的值错误。但是什么环境变量呢?

4

3 回答 3

1

以防万一:名为“user.dir”的系统属性应指向当前工作目录,而不是用户主目录(参见http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html) . 如果您想拥有用户主目录,请使用名为“user.home”的属性。

我的java测试程序:

public class UserDirSystemProperty {
    public static void main(final String[] args) {
        System.out.println(System.getProperty("user.dir"));
    }
}

总是给我当前目录的绝对路径。我刚刚安装了ant(apache-ant-1.8.4),这里的输出也是绝对路径。

保存当前工作目录的唯一环境变量是 PWD,但即使像这样修改 PWDPWD=. ant -diagnostics | grep dir也不会改变任何事情,它仍然会打印user.dir : /home/holger/Programming. 所以这必须是环境之外的东西。

我的下一个猜测是权限:目录 /home/user 可能是 NFS 挂载并且运行 ant 的用户(一些放错位置的 suid 位?)没有访问该目录的权限。要对此进行测试:执行 acd /tmpant -diagnostics再次运行。

于 2012-12-02T20:39:19.340 回答
0

那有什么问题?你想要用户目录的绝对位置吗?

如果是这样就这样做

new File(System.getProperty("user.dir")).getAbsolutePath()
于 2012-05-08T20:30:32.743 回答
-1

主目录在 /etc/passwd 文件中设置。

parv1616@parv:~$ cat /etc/passwd | grep parv1616

parv1616:x:1000:1000:Parvinder Singh,,,: /home/parv1616 :/bin/bash

你只需要用你想要的目录来改变它。

也可以使用 usermod 命令更改。

如果仍然不起作用,请告诉我。

于 2013-05-02T08:57:46.413 回答