2

I had previously asked the same question but with no answer, and have found some other questions similar to this problem here and here but again with no appropriate answers. Can anyone please help me out with this. I am trying to open a shell from Java and interact with it (write commands and read the shell's output). The commands will be given by the user like changing directory, compiling a C program etc. The command list is not fixed.

I have also tried and use the /bin/bash -c method and the following as well.

Process p = new ProcessBuilder("xterm").start();

Process p = new ProcessBuilder("/bin/bash").start();

Thanks and I hope that the problem is clear.

Community
  • 1
  • 1
sol
  • 95
  • 1
  • 12
  • Should your Java program be a "director" for the shell being executed, or it's intended to run a shell and provide a user ability to interact with it? – user3159253 Feb 17 '14 at 07:11
  • I want to start the shell with some directory redirected (Java will change the directory of the shell using cd command). Once started, I want that the user can interact with it. – sol Feb 17 '14 at 07:19
  • If you want to start an interractive shell, you really need to start a virtual terminal, just the shell is not enough. The shell only processes commands, starts processes and ties them together, but it isn't what displays the output in a box – Mzzl Feb 17 '14 at 07:58
  • Can you explain what you need this for? Maybe there is another way to do it. There are several java implementations of interactive shells, such as java shell http://java-shell.sourceforge.net/ rhino https://developer.mozilla.org/en/docs/Rhino/Shell and http://www.beanshell.org/ – Mzzl Feb 17 '14 at 08:07
  • I wish to develop a C program profiler in Java. For proper module development it will be useful if the user can compile and execute the C code via the GUI provided itself without separately opening the bash terminal. – sol Feb 18 '14 at 05:49

1 Answers1

1

Example of workable solution will be almost like below

   Process process;

   rt = Runtime.getRuntime();

try 
{

    process = rt.exec(new String[]{"bash","-c","ls -al /home/"});

    log.warn("message to display");

    BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));

    String line=null;

    while((line=input.readLine()) != null) {

        log.warn(line);
    }

    int exitVal = process.waitFor();

    log.warn("Exited with error code : "+ exitVal);

}
catch (IOException e) 
{
    log.warn("IO Execption 1 Happen : " + e.getMessage());
} 
catch (Exception e) 
{
    log.warn("Execption Happen : " + e.getMessage());
}
Saddam Abu Ghaida
  • 6,381
  • 2
  • 22
  • 29