java - 正确设置工作路径

标签 java unix process processbuilder

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/ 成为当前路径?

换句话说

为什么要公共(public)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 一起使用)还没有得到解答......???

最佳答案

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

请注意,如果 PWD 不是当前目录的绝对路径名,shell 会忽略它,而是向系统询问不带符号链接(symbolic link)的绝对路径名。

关于java - 正确设置工作路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542341/

相关文章:

java - hawtio - 预定义的远程代理列表

unix - ssh 命令即使在完成其工作后也不会退出

.net - 我是一个进程,消耗多少CPU?

java - 带有 LIKE 和 IgnoreCase 的 Spring Data CrudRepository @Query

java - 如何使用 JPA 1.0 构建 JPQL 查询从多个表中获取数据以克服惰性初始化?

linux - 如何在 UNIX 中使用 awk 以不同方式(通过 argc 中的文件名位置)打印来自多个文件的文本?

java - 在 Java 中执行 "tar -ztf"命令时出现问题

c# - 在 WinForm 项目选项卡中运行 exe

c - 有没有办法用命令行结束Windows任务(而不是进程)?

java - Scala - 字符串到 Url