Установите рабочий путь правильно

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 ) еще не решена...???


person ogzylz    schedule 22.08.2010    source источник
comment
Является ли server1 общим сетевым ресурсом?   -  person TheDevOpsGuru    schedule 22.08.2010
comment
Это физический сервер. другие серверы могут получить доступ через путь /server1/.. . Есть общие файлы, папки на server1..   -  person ogzylz    schedule 22.08.2010
comment
Вы пробовали запустить pwd -L? Я считаю, что pwd по умолчанию разыменовывает символические ссылки.   -  person Borealid    schedule 22.08.2010
comment
pwd не проблема. он существует только для отладки. Когда я звоню с server2, мне говорят, что я не могу найти путь /work/.. , потому что он должен быть /server1/work/.. . путь /work/.. недоступен для server2, но символическая ссылка /server1/work/..   -  person ogzylz    schedule 22.08.2010


Ответы (1)


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

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

person jilles    schedule 10.09.2010