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

        });

これもうまくいきませんでした。

cd / server1 / ..行をbashスクリプトに追加し、pd.directory(..)行を削除することで、問題を解決しました。しかし、この問題(absolutePathでpd.directory(..)を使用できない理由)はまだ回答されていません... ???

4

1 に答える 1

0

シェルのcdユーティリティを使用することは適切な解決策のようです。PWD別の方法は、環境変数をシンボリックリンクを使用してパス名に設定するProcessBuilderことですが、自動的に行うことができない限り、これは醜いです。

シェルPWDは、それが現在のディレクトリの絶対パス名でない場合は無視し、代わりにシンボリックリンクのない絶対パス名をシステムに要求することに注意してください。

于 2010-09-10T21:50:41.013 に答える