【问题标题】:Set the working path correctly正确设置工作路径
【发布时间】:2010-08-22 16:47:20
【问题描述】:
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 一起使用)尚未得到解答...???

【问题讨论】:

  • server1是共享网络资源吗?
  • 是物理服务器。其他服务器可以通过路径/server1/...访问。 server1中有共享文件、文件夹..
  • 你试过运行pwd -L吗?我相信pwd 默认会取消引用符号链接。
  • 密码不是问题。它仅用于调试目的。当我从 server2 调用时,它说我找不到路径 /work/.. ,因为它必须是 /server1/work/.. 。路径 /work/.. 对 server2 不可用,但符号引用 /server1/work/..

标签: java unix process processbuilder


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多