Установите рабочий путь правильно - PullRequest
1 голос
/ 22 августа 2010
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 (Файловый каталог) преобразует каталог в канонический файл. Как я могу использовать абсолютный путь к файлу ??

Я тоже пробовал взломать soln '

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

        });

, который тоже не работал.

Я решил свою проблему, добавив строку cd / server1 / .. в скрипт bash .. и удалив строку pd.directory (..). НО эта проблема (почему я не могу использовать pd.directory (..) с absolutePath) еще не решена ... ???

1 Ответ

0 голосов
/ 11 сентября 2010

Использование утилиты оболочки cd представляется подходящим решением.Альтернативой может быть установка переменной окружения PWD на путь с символическими ссылками, но это уродливо, если вы не получите ProcessBuilder, чтобы сделать это автоматически.

Обратите внимание, что оболочки игнорируют PWD, если этоне является абсолютным путем для текущего каталога, а запрашивает у системы абсолютный путь без символических ссылок.

...