Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Melaksanakan Perintah Shell dengan Amanah dengan Runtime Java?

Bagaimanakah Saya Boleh Melaksanakan Perintah Shell dengan Amanah dengan Runtime Java?

Susan Sarandon
Lepaskan: 2024-12-06 05:43:10
asal
557 orang telah melayarinya

How Can I Reliably Execute Shell Commands with Java's Runtime?

Memanipulasi Gelagat Shell dalam Java Runtime

Apabila menggunakan utiliti Runtime.exec(String) Java, percanggahan boleh timbul antara melaksanakan arahan shell tertentu. Untuk memahami anomali ini, kita mesti menyelidiki mekanik operasi shell.

Memahami Tanggungjawab Shell

Shells melaksanakan tugas penting yang menyokong pelaksanaan arahan, termasuk:

  • Petikan dan Pengendalian Ruang: Cengkerang memastikan tepat menghuraikan argumen, menghalang ruang daripada memecahkan rentetan seperti "Fail.txt Saya."
  • Peluasan Glob: Globs (*, ?) dikembangkan menjadi nama fail tertentu sebelum pelaksanaan.
  • Pengurusan Ubah Arah: Kerang menguruskan paip (|) dan ubah hala (>) untuk output dan input arahan.
  • Pembolehubah dan Peluasan Perintah: Pembolehubah seperti $HOME boleh dikembangkan dan arahan seperti $(pwd) boleh dilaksanakan dan diinterpolasi ke dalam arahan rentetan.

Punca Pelaksanaan Kegagalan

Arahan yang bergantung kepada Shell mungkin gagal apabila dipanggil melalui Runtime.exec(String) kerana:

  • Kekurangan Fungsi Shell: Runtime.exec (String) melaksanakan arahan tanpa menggunakan shell, yang bermaksud ia tidak mempunyai pemprosesan shell keupayaan.

Penyelesaian

Mudah Tetapi Tidak Sempurna:

Menggunakan Runtime.exec(String[]) dan menghantar arahan kepada jurubahasa shell membolehkan arahan langsung pelaksanaan:

String myFile = "some filename.txt";
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog";
Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });
Salin selepas log masuk

Teguh dan Selamat:

Untuk meningkatkan keselamatan dan keteguhan, kendalikan tanggungjawab shell secara eksplisit menggunakan 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();
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Perintah Shell dengan Amanah dengan Runtime Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan