Rumah >Java >javaTutorial >Mengapa `Runtime.exec(String)` Kadangkala Gagal Melaksanakan Perintah dengan Betul?
Mengapa Runtime.exec(String) Berkelakuan Berbeza untuk Perintah Tertentu?
Runtime.exec(String) membenarkan pelaksanaan arahan dalam persekitaran sistem pengendalian asas. Walau bagaimanapun, sementara ia berfungsi dengan lancar untuk beberapa arahan, isu timbul dengan yang lain.
Mengapa Perbezaannya?
Perbezaan utama berpunca daripada fakta bahawa arahan itu tidak dilaksanakan dalam persekitaran cangkang. Cangkang menyediakan perkhidmatan penting yang tidak dijalankan oleh Runtime.exec(String), yang membawa kepada ralat.
Bilakah Kegagalan Berlaku?
Arahan gagal apabila mereka bergantung pada ciri cangkerang, seperti:
Penyelesaian
Terdapat dua pendekatan untuk mengendalikan situasi ini:
Mewakilkan kepada Shell (Mudah tetapi Ceroboh):
Lulus arahan ke shell (cth., menggunakan Runtime.exec(String[])):
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog"; Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });
Memikul Tanggungjawab Shell (Secure and Robust):
Menggunakan ProcessBuilder untuk mengendalikan tugas seperti cangkerang, seperti pengembangan pembolehubah, pengalihan semula dan pemisahan perkataan:
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();
Atas ialah kandungan terperinci Mengapa `Runtime.exec(String)` Kadangkala Gagal Melaksanakan Perintah dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!