Execute Linux Shell Command within Java Program

Java memang memiliki pustaka sendiri, baik yang native terhadap suatu sistem operasi maupun yang bersifat OS independent, namun kebutuhan untuk menjalankan fungsi eksternal suatu OS kadang tetap dibutuhkan.

Salah satu fungsi yang bisa digunakan adalah Runtime.exec yang bisa dimanfaatkan untuk melakukan encapsulasi perintah dari bash shell (terminal) pada Linux.


Sebagian programmer mungkin berargumen, mengapa mesti menggunakan perintah bash untuk melakukan suatu pekerjaan, padahal sebagian fungsi tersebut sudah tersedia pada pustaka Java. Jawabnya, ada banyak hal yang bisa kita lakukan dengan menjalankan suatu perintah secara langsung tanpa menggunakan pustaka.

Contohnya adalah konfigurasi pada email server postfix. Email server postfix mendukung perintah postconf -e item_konfigurasi=pilihan_konfigurasi. Dengan melakukan encapsulasi perintah tersebut, kita bisa membuatkan front-end GUI yang mempermudah proses instalasi postfix.

Ide ini muncul setelah saya membuat skrip sederhana untuk otomatisasi install postfix pada SuSE Linux.

Berikut adalah kode sederhana untuk menjalankan perintah shell pada program Java.

try {
// Execute a command without arguments
String command = "ls";
Process child = Runtime.getRuntime().exec(command);

// Execute a command with an argument
command = "ls /tmp";
child = Runtime.getRuntime().exec(command);
} catch (IOException e) {
}

Jika argumen memiliki spasi, kita bisa melakukan overload agar perintah dan argumennya dikirim dalam bentul array, seperti contoh berikut :

try {
// Execute a command with an argument that contains a space
String[] commands = new String[]{"grep", "hello world", "/tmp/f.txt"};
commands = new String[]{"grep", "hello world", "c:\\Documents and Settings\\f.txt"};
Process child = Runtime.getRuntime().exec(commands);
} catch (IOException e) {
}

Contoh lain adalah menjalankan suatu class dengan argumen dan menampilkan hasilnya. Lihat contoh kode berikut :

import java.io.*;
public class ProcTest
{
public static void main(String args[]) throws IOException
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(args);
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while(br.ready())
{
System.out.println(br.readLine());
}
}
}

Compile dan jalankan dengan perintah java ProcTest ls.

Semoga bermanfaat.

3 thoughts on “Execute Linux Shell Command within Java Program

  1. wah tulisan yang bgs tu mas, tapi saya coba dengan perintah :

    try {
    // Execute a command with an argument that contains a space
    String[] commands = new String[]{“ls > /home/temp.txt”};
    commands = new String[]{“ls > /home/temp.txt”};
    Process child = Runtime.getRuntime().exec(commands);
    } catch (IOException e) {
    }

    kok ga ada output nya ya? harus nya kan tercipta file temp.txt, yang isi file nya output nya ls…mohon bantuannya mas…
    Makasih

  2. Halo Ndut,

    Perintah diatas bukan untuk membuat file tapi melakukan eksekusi. Jadi commandnya yang dieksekusi, bukan pembuatannya.

    ls kan buat menampilkan, bukan membuat file

    Coba pakai perintah ini :
    echo “Hello Vavai” > /home/user/test.txt

  3. tengkyu mas…tapi maxud nya bkn gt, saya ingin membuat sebuat file dengan nama (misalnya) temp.txt di dlm folder /home/user/ dan isi dari file tersebut adalah
    hasil dari eksekusi dari perintah ls.

    makasih mas

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.