1
ProcessBuilder pb = new ProcessBuilder("pwd");
pb.directory(new File("/server1/work/uz/rt/adapt/0/"));
Process s = pb.start();

我希望输出是/server1/work/uz/rt/adapt/0/,但它是:

/work/uz/rt/adapt/0/

/work/uz/rt/adapt/0/并且/server1/work/uz/rt/adapt/0/是等效的(安装在同一个地方,/work/.. 是正确的路径,/server1/work/.. 是安装的路径),但我需要在下面工作,/server1/work/uz/rt/adapt/0/因为其他一些服务器只能通过该路径工作。

如何制作/server1/work/uz/rt/adapt/0/当前路径?

换句话说

为什么公共 ProcessBuilder 目录(文件目录)将目录转换为规范文件。如何使用绝对文件路径?

我也尝试了破解解决方案

        pb.directory(new File("/asr1/work/oguz/rt/adaptMLLR2/0/"){
             public File getCanonicalFile(){
                 return this.getAbsoluteFile();
             }
             public String getCanonicalPath() {
                 return this.getAbsolutePath();
             }

        });

这也不起作用。

我通过在 bash 脚本中添加 cd /server1/.. 行来解决我的问题.. 并删除了 pd.directory(..) 行。但是这个问题(为什么我不能将 pd.directory(..) 与 absolutePath 一起使用)尚未得到解答......?

4

1 回答 1

0

使用 shell 的cd实用程序似乎是一个合适的解决方案。另一种方法是使用符号链接将PWD环境变量设置为路径名,但这很丑陋,除非ProcessBuilder您自动为您执行此操作。

请注意,PWD如果它不是当前目录的绝对路径名,shell 将忽略它,而是要求系统提供不带符号链接的绝对路径名。

于 2010-09-10T21:50:41.013 回答