ホームページ >Java >&#&チュートリアル >「Runtime.exec(String)」が時々コマンドを正しく実行できないのはなぜですか?
特定のコマンドで Runtime.exec(String) の動作が異なるのはなぜですか?
Runtime.exec(String) では、次のコマンドを実行できます。基礎となるオペレーティング システムの環境。ただし、一部のコマンドではシームレスに機能しますが、他のコマンドでは問題が発生します。
なぜ違いますか?
主な違いは、コマンドが実行されないという事実に起因します。シェル環境で。シェルは、Runtime.exec(String) によって実行されない重要なサービスを提供するため、エラーが発生します。
いつ失敗が発生しますか?
コマンドが依存している場合、コマンドは失敗します。次のようなシェル機能:
解決策
この状況を処理するには 2 つのアプローチがあります:
シェルへの委任 (単純ですが、ずさんな):
コマンドをシェルに渡す (例: Runtime.exec(String[]) を使用する):
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog"; Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });
シェルの責任を引き受ける (安全で安全な堅牢):
を使用変数展開、リダイレクト、単語分割などのシェルのようなタスクを処理する ProcessBuilder:
String myFile = "some filename.txt"; ProcessBuilder builder = new ProcessBuilder( "cp", "-R", myFile, System.getenv("HOME") ); builder.redirectError(ProcessBuilder.Redirect.to(new File("errorlog"))); builder.start();
以上が「Runtime.exec(String)」が時々コマンドを正しく実行できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。