为什么 user.dir 可以设置为 "." ?



如果以下命令说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 环境变量具有错误的值。但是什么环境变量呢?

以防

万一:名为"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,但即使像这样修改 PWD PWD=. ant -diagnostics | grep dir也不会改变事情,它仍然打印user.dir : /home/holger/Programming。所以这必须是环境以外的其他东西。

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

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

如果是这样,就去做

new File(System.getProperty("user.dir")).getAbsolutePath()

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

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

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

您只需要使用所需的目录更改它。

它也可以用usermod命令进行更改。

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

相关内容

  • 没有找到相关文章

最新更新