Java ランタイムでシェル コマンドを確実に実行するにはどうすればよいですか?
Dec 06, 2024 am 05:43 AMJava ランタイムでのシェルの動作の操作
Java の Runtime.exec(String) ユーティリティを使用する場合、特定のシェル コマンドの実行間に不一致が発生する可能性があります。これらの異常を理解するには、シェル操作の仕組みを詳しく調べる必要があります。
シェルの責任を理解する
シェルは、コマンドの実行をサポートする次のような重要なタスクを実行します。
- 引用符とスペースの処理:シェルは引数の正確な解析を保証し、「My File.txt」のような文字列がスペースによって分解されるのを防ぎます。
- グロブ展開: グロブ (*, ?) は実行前に特定のファイル名に展開されます。
- リダイレクト管理: シェルはパイプ (|) とリダイレクトを管理します(>) コマンドの出力と入力。
- 変数とコマンドの展開: $HOME などの変数は展開でき、$(pwd) などのコマンドは実行してコマンドに挿入できます。 string.
実行の原因失敗
シェルに依存するコマンドは、Runtime.exec(String) を介して呼び出すと失敗する可能性があります。理由は次のとおりです。
- シェル機能の欠如: Runtime.exec (文字列) はシェルを呼び出さずにコマンドを実行します。つまり、シェルの処理がありません。機能。
回避策
単純だが不完全:
Runtime.exec(String[]) とコマンドをシェルインタープリタに渡すことで、直接コマンドを実行できるようになります。実行:
String myFile = "some filename.txt"; 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();
以上がJava ランタイムでシェル コマンドを確実に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正
