Задайте правилно работния път

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();
             }

        });

което също не работи.

Разреших проблема си, като добавих 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/.. не е достъпен за сървър2, но символната препратка /server1/work/..   -  person ogzylz    schedule 22.08.2010


Отговори (1)


Използването на помощната програма cd на shell изглежда подходящо решение. Алтернатива би била да зададете променливата на средата PWD на името на пътя със символни връзки, но това е грозно, освен ако не накарате ProcessBuilder да го направи автоматично вместо вас.

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

person jilles    schedule 10.09.2010