Javaでsystem execを使用して何かをしようとしています
Runtime.getRuntime().exec(command);
驚くべきことに、パス、ディレクトリ、およびファイルに関連するすべてがうまく機能していません
理由がわかりません。代替手段はありますか?
別の方法は、インターフェイスがややクリーンなProcessBuilderクラスを使用することですが、主な問題はおそらくOSがコマンドラインを処理する方法に関連しており、Javaがそれを支援するためにできることはあまりありません。
上で述べたように、cd はシェルのビルトインです。つまり、実行可能ファイルではありません。これは、次を使用して決定できます。
$ which cd
cd: shell built-in command
スタンドアロンの実行可能ファイルでRuntime.exec()
はないため、何も実行できません。
シェル固有の処理 (作業ディレクトリの変更など) を行うシェル スクリプトを作成し、Runtime.exec()
. スクリプト内で PATH 変数などを設定し、Java をそのままにしてスクリプトを実行することができます。
人々を悩ませていることの 1 つは、スクリプトの stdout/stderr を消費しなければならないことです (たとえ破棄したとしても)。これを適切に行わないと、プロセスがブロックされる可能性があります。詳細については、この SO の回答を参照してください。
exec() メソッドは 3 つの引数を取ることができます。3 番目は、サブプロセスが作業ディレクトリとして使用するディレクトリです。とにかく、それはあなたの「cd」の問題を解決します。