Unable to run certain commands on unix using the Runtime.getRuntime().exec(

Hi Folks,
I am unable to get any output if I try : Runtime.getRuntime().exec("who am i")
however for Runtime.getRuntime().exec("pwd") I am getting the present working directory path !!!
if I give Runtime.getRuntime().exec("echo $PATH") then instead of printing the path it prints $PATH instead !!! similarly it is unable to understand any of the special unix characters such as " or ' & is assuming it to be a literal instead.
Any idea why this is happening ?? and any solution for the same
regards
Anand

I don't think that Runtime.getRuntime().exec() spawns a shell it just executes the file that is specified in the string. ecause of this you can not use commands that are built-in in the shell directly nor use special shell characters. You must spawn your own shell, try something like this:
Runtime.getRuntime().exec("sh");I'm sure you can add some switch to sh to execute a command by I am not using unix myself so I don't know how. Someone else have to help you with that. You can allways read the man-pages.

Similar Messages

  • Using Process Runtime.getRuntime().exec

    http://im1.shutterfly.com/procserv/47b4d633b3127cceb46774c84ee80000001610
    Here is a URL to a part of the current process I need to run. Actually there are 4 steps that preceed these but they are ran in order and must be done before these (that part is easy). Sorry it kinda chopped off the left side a little bit.
    My question is, can I do this entirely using Runtime.getRuntime().exec() commands or do I need to involve multi threading. The reason I am asking is because P13 cannot run until P8 and P9 completes, but that shouldn't stop the rest of the program from running.
    If I have something like
    Process P4 = Runtime.getRuntime().exec(P4);
    Process P5 = Runtime.getRuntime().exec(P2);
    // Some handling for the streams of these processes goes here
    P4.waitFor();
    P2.waitFor();
    if(P2.exitValue() != 0){
    Process P5 = Runtime.getRuntime().exec(P5);
    Process P6 = Runtime.getRuntime().exec(P6);
    // Some handling for the streams of these processes goes here
    Does that mean the whole program will stop and wait until P4 is done before even checking for P2? If P2 is finished would the program continue and run P5 and P6 even if P4 is still running or will it wait for P4 to complete also. P4 has nothing to do with P2?
    Also any advice ???

    P4 and P2 will both be running in parallel (or as much as your OS and hardware allows them to be). As soon as both are done, and regardless of which finishes first, whatever follows P2.waitFor() will execute.
    If you have multiple groups of processes, where the processes within a group must execute sequentially, but the groups themselves can run independently of each other, then you'll need to either use Java's threads, or wrap each group of sequential processes in a shell script or batch file the executes that group sequentially.
    If there are complex dependencies among the groups--that is, multiple groups must wait on the same process, or one group must wait for multiple other groups, then it might be easier to control the concurrency in Java.

  • Unable to run Java Command (on UNIX)

    Hi,
    When I try to run Java command:
    java ChatServer 9830
    I get the following error:
    /usr/bin/java: line 67: /tmp/javaJb9694: Permission denied
    /usr/bin/java: line 67: /tmp/javaJb9694: Success
    Could any one suggest what could be the reason and solution.
    The site is hosted on a UNIX palatform and we are using Tomcat.
    Thanks & Regards,
    Joy.

    lol
    How would we know? We don't know your setup, we don't know your software, we don't know what happens...
    It doesn't even look like a standard Java message to me.

  • Strange behaviour of Runtime.getRuntime().exec(command)

    hello guys,
    i wrote a program which executes some commands in commandline (actually tried multiple stuff.)
    what did i try?
    open "cmd.exe" manually (administrator)
    type "echo %PROCESSOR_ARCHITECTURE%" and hit enter, which returns me
    "AMD64"
    type "java -version" and hit enter, which returns me:
    "java version "1.6.0_10-beta"
    Java(TM) SE Runtime Environment (build 1.6.0_10-beta-b25)
    Java HotSpot(TM) 64-Bit Server VM (build 11.0-b12, mixed mode)"
    type "reg query "HKLM\SOFTWARE\7-zip"" returns me:
    HKEY_LOCAL_MACHINE\SOFTWARE\7-zip
    Path REG_SZ C:\Program Files\7-Zip\
    i wrote two functions to execute an command
    1) simply calls exec and reads errin and stdout from the process started:
    public static String execute(String command) {
              String result = "";
              try {
                   // Execute a command
                   Process child = Runtime.getRuntime().exec(command);
                   // Read from an input stream
                   InputStream in = child.getInputStream();
                   int c;
                   while ((c = in.read()) != -1) {
                        result += ((char) c);
                   in.close();
                   in = child.getErrorStream();
                   while ((c = in.read()) != -1) {
                        result += ((char) c);
                   in.close();
              } catch (IOException e) {
              return result;
         }the second function allows me to send multiple commands to the cmd
    public static String exec(String[] commands) {
              String line;
              String result = "";
              OutputStream stdin = null;
              InputStream stderr = null;
              InputStream stdout = null;
              // launch EXE and grab stdin/stdout and stderr
              try {
                   Process process;
                   process = Runtime.getRuntime().exec("cmd.exe");
                   stdin = process.getOutputStream();
                   stderr = process.getErrorStream();
                   stdout = process.getInputStream();
                   // "write" the parms into stdin
                   for (int i = 0; i < commands.length; i++) {
                        line = commands[i] + "\n";
                        stdin.write(line.getBytes());
                        stdin.flush();
                   stdin.close();
                   // clean up if any output in stdout
                   BufferedReader brCleanUp = new BufferedReader(
                             new InputStreamReader(stdout));
                   while ((line = brCleanUp.readLine()) != null) {
                        result += line + "\n";
                   brCleanUp.close();
                   // clean up if any output in stderr
                   brCleanUp = new BufferedReader(new InputStreamReader(stderr));
                   while ((line = brCleanUp.readLine()) != null) {
                        result += "ERR: " + line + "\n";
                   brCleanUp.close();
              } catch (IOException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              return result;
         }so i try to execute the commands from above (yes, i am using \\ and \" in java)
    (1) "echo %PROCESSOR_ARCHITECTURE%"
    (2) "java -version"
    (3) "reg query "HKLM\SOFTWARE\7-zip""
    the first function returns me (note that ALL results are different from the stuff above!):
    (1) "" <-- empty ?!
    (2) java version "1.6.0_11"
    Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
    Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
    (3) ERROR: The system was unable to find the specified registry key or value.
    the second function returns me:
    (1) x86 <-- huh? i have AMD64
    (2) java version "1.6.0_11"
    Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
    Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
    (3) ERROR: The system was unable to find the specified registry key or value.
    horray! in this version the java version is correct! processor architecture is not empty but totally incorrect and the reg query is still err.
    any help is wellcome
    note: i only put stuff here, which returns me strange behaviour, most things are working correct with my functions (using the Runtime.getRuntime().exec(command); code)
    note2: "reg query "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0" /t REG_SZ" IS working, so why are "some" queries result in ERR, while they are working if typed by hand in cmd.exe?

    ok, i exported a jar file and execute it from cmd:
    java -jar myjar.jar
    now the output is:
    (1) "" if called by version 1, possible to retrieve by version 2 (no clue why!)
    (2) "java version "1.6.0_10-beta"
    Java(TM) SE Runtime Environment (build 1.6.0_10-beta-b25)
    Java HotSpot(TM) 64-Bit Server VM (build 11.0-b12, mixed mode)"
    (3) C:\Program Files\7-Zip\
    so all three problems are gone! (but its a hard way, as i need both functions and parse a lot of text... :/ )
    thanks for the tip, that eclipse changes variables (i really did not knew this one...)

  • Executing a command by Runtime.getRuntime.exec().

    Hi,
    I am try to run a java command from one java program. Is it possible
    eg :
    public class A {
    public static void main(String[] args) {
    String startjvm ="java -classpath E:\classes B";
    Runtime.getRuntime.exec(startjvm);
    public class B {
    public static void main(String[] args) {
    System.out.println("Inside the main for class B");
    when i execute the above command from the command line it executes,but when are run the main method for class A nothing happens meaning the message : "Inside the main for class B" is not displayed.
    I also tried displaying the int returned by process.waitfor() method. process is the object returned by the Runtime.getRuntime.exec() method. The int returned is 0 which means the process terminated previously.
    Thanks in advance

    You could get InputStream from created Process and read
    information from it.
    For example
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class A {
        public static void main(String[] args) {
            try{
                String startjvm ="java -classpath E:\\classes B";
                Process s = Runtime.getRuntime().exec(startjvm);
                BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
                String line = "";
                while ((line = in.readLine()) != null) {
                    System.out.println(line);
                in.close();
            }catch(Exception e){
                e.printStackTrace();
        }

  • Help please! [using Runtime.exec() to run find command in UNIX]

    Hi guys! im trying to use exec() to run the UNIX find command
    that my application uses. As you can see from my sample code, the find command finds all files ending with html in my home directory. Unfortunately when I run the program it doesn't give me an output, but when I run it on the shell in the same directory as this code is saved, it works perfectly fine.
    Could someone please help me on this one. Many thanks! =)
    import java.io.*;
    import java.lang.String;
    public class RunCommand {
            public static void main(String[] args) {
                    try {
                            String[] command = {"find", "~/", "-name",
                                            "*.html", "-print"};
                            String find_str;
                            Process find_proc = Runtime.getRuntime().exec(
                                            command);
                            DataInputStream find_in = new DataInputStream(
                                            find_proc.getInputStream());
                            try {
                                    while ((find_str = find_in.readLine())
                                                                    != null) {
                                            System.out.println(find_str);
                            } catch (IOException e) {
                                    System.exit(0);
                    } catch (IOException e1) {
                            System.err.println(e1);
                            System.exit(1);
                    System.exit(0);
    }

    I don't see anythi obvious. In both catch blocks, call printSckTrace on the exception yhou caught.
    I think the real culprit is the ~ though.
    ~ is interpreted by some (most?) shells to men home dir. However, when you just exec a command, you don't have a shell to do that interpretation for you, so it's looking for a directory that's literally named ~.
    Either exec a shell (read the man pages for the shell of your choice, but for zsh I think it's "/bin/zsh -c find ~ blah blah blah) or else just put the actual path to your home directory into the string you pass to exec. You can get that from System.getProperty("user.home").

  • Running curl command from a java program using Runtime.getRuntime.exec

    for some reason my curl command does not run when I run it from within my java program and errors out with "https protocol not supported". This same curl command however runs fine from any directory on my red hat linux system.
    To debug the problem, I printed my curl command from the java program before calling Runtime.getRuntime.exec command and then used this o/p to run from the command line and it runs fine.
    I am not using libcurl or anything else, I am running a simple curl command as a command line utility from inside a Java program.
    Any ideas on why this might be happening?

    thanks a lot for your response. The reason why I am using curl is because I need to use certificates and keys to gain access to the internal server. So I use curl "<url> --cert <path to the certificate>" --key "<path to the key>". If you don't mid could you please tell me which version of curl you are using.
    I am using 7.15 in my system.
    Below is the code which errors out.
    public int execCurlCmd(String command)
              String s = null;
              try {
                  // run the Unix "ps -ef" command
                     Process p = Runtime.getRuntime().exec(command);
                     BufferedReader stdInput = new BufferedReader(new
                          InputStreamReader(p.getInputStream()));
                     BufferedReader stdError = new BufferedReader(new
                          InputStreamReader(p.getErrorStream()));
                     // read the output from the command
                     System.out.println("Here is the standard output of the command:\n");
                     while ((s = stdInput.readLine()) != null) {
                         System.out.println(s);
                     // read any errors from the attempted command
                     System.out.println("Here is the standard error of the command (if any):\n");
                     while ((s = stdError.readLine()) != null) {
                         System.out.println(s);
                     return(0);
                 catch (IOException e) {
                     System.out.println("exception happened - here's what I know: ");
                     e.printStackTrace();
                     return(-1);
         }

  • Run Host Command on UNIX

    Hi,
    We use JAVA source in Oracle to execute some unix commands directly from within stored procedures in Oracle.
    Our Java source looks like this :
    CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "HOST" AS
    import java.lang.*;
    import java.io.*;
    public class Host
    public static void executeCommand (String command, String etype) throws IOException
    String[] wFullCommand = {"C:\\winnt\\system32\\cmd.exe", "/y", "/c", command};
    String[] uFullCommand = {"/bin/sh", "-c", command};
    if (etype.toUpperCase().equals("W"))
    Runtime.getRuntime().exec(wFullCommand);
    else if(etype.toUpperCase().equals("U+"))
    Runtime.getRuntime().exec(uFullCommand);
    else if(etype.toUpperCase().equals("U"))
    Runtime.getRuntime().exec(command);
    CREATE OR REPLACE PROCEDURE Host_Command (p_command IN VARCHAR2, p_etype IN VARCHAR2)
    AS LANGUAGE JAVA
    NAME 'Host.executeCommand (java.lang.String, java.lang.String)';
    We call one unix shell script and discover that some UNIX commands from this shell script are executed and others not. A cp & touch command don't give problems whilst cat & unix2dos commands don't function.
    Can anybody help me on this subject?
    Thanks !
    Kris

    Hi Avi, thanks for your reaction. Got it to work with the unix scripts, the problem was a syntax error in the script itself.
    However I don't get it to function when I try to run a unix command directly. Normally the parameter U+ should decide to start it in a shell for scripts and otherwise it should run the command directly. (whithout the /bin/sh in front of it).
    I already adapted my source to try to execute the command in a new shell but without success :
    String[] uFullCommand = {"/bin/sh", "-c", "\'cp /export/home/caluwaek/test/bestand2 /export/home/caluwaek/test/bestand8\'"};
    I tried to put the whole command in one string, in 3 strings, to just call the cp command without bothering the shell. Nothing seems to work.
    In unix both the following work :
    cp /export/home/caluwaek/test/bestand2 /export/home/caluwaek/test/bestand8
    and
    /bin/sh -c 'cp /export/home/caluwaek/test/bestand2 /export/home/caluwaek/test/bestand8'
    Thanks for your help!
    Kris

  • Running commands from the Command Prompt -  Runtime.getRuntime().exec()

    Hi there,
    I'm already able to run several commands in the command prompt.
    But my problem is that I need all the commands that I run share the same context.
    If, for example, I run "cmd /c set HOME=C:" (1st command), I want to be able to access that variable the next time, so that later when I run "dir %home%" it shows the directories in c: (This is just a example this is not what I really want to do...)
    I used code posted in a newsgroup (don't remember which)
    This is the code I use to execute commands:
         private int execute(String command)
         int exitVal = 0;
    try
    String nomeOS = System.getProperty("os.name" );
    String[] cmd = new String[3];
    if( nomeOS.equals( "Windows NT" ) || nomeOS.equals("Windows 2000") )
    cmd[0]="cmd.exe";
    cmd[1]="/c";
    cmd[2]=command;
    else if( nomeOS.equals( "Windows 95" ) )
    cmd[0]="command.com";
    cmd[1]="/c";
    cmd[2]=command;
    if (rt==null)
         rt = Runtime.getRuntime();
              Process proc = rt.exec(cmd);
              CommandStream erro = null;
              // erros?
              if (proc.getErrorStream()!=null)
                   erro = new CommandStream(proc.getErrorStream());
                   erro.start();
    // output?
    CommandStream output = new
    CommandStream(proc.getInputStream());
    // arranque
    output.start();
    // erros???
    exitVal = proc.waitFor();
         } catch (IOException e)
                   System.out.println("Exce !!!" );
                   e.printStackTrace();
         catch (InterruptedException ie)
                   System.out.println("Ocorreu uma excep��o !!!" );
                   ie.printStackTrace();
    return exitVal;      

    My problem is bigger than setting a few parameters,
    I'm doing a GUI to a CVS client and the problem is that some commands of CVS only work if you're in the right directory, or if you're authenticated, and all of this is easily done doing a series of execution:
    In a command prompt opened I would:
    set cvsroot=:pserver:lpinho@w2palf38:/project
    cvs -d :pserver:lpinho:xxxxx@w2palf38:/project login
    mkdir temp_my_proj
    cd temp_my_proj
    cvs checkout my_projectAll this would make what I wanted...
    And there's another thing, when I set the envp, I get some errors like "cvs.exe is not recognized as an internal or external command" (the path went bye bye) and if I set the path (envp[0]="path=c:\cvsnt"), I'm able to run cvs but I get a crazy error "No such host is known" (I run exactly the same command in the command prompt and it works...)
    Do you know any way of getting the current environment, and pass it as the envp parameter?
    Thank You
    Luis Pinho

  • Unable to change reference point location while using the Transform Functions in Photoshop Elements 6.0.

    Unable to change reference point location while using the Transform Functions in Photoshop Elements 6.0.

    Which operating system are you using?
    In photoshop elements 6, as far as i know, you can only change the Reference Point Location for transforms using the small grid in the left hand corner of the tool options bar with Transform enabled.

  • How to run 2 different Firefox versions using the same profile

    Is it possible to run 2 different Firefox versions using the same profile and still have browsing history saved? I used to be able to do that up until a week ago. What happened was I was using Firefox version 3.6.28(a very old version of Firefox) which I need to use sometimes and then the current version, 36.01. Earlier I would use both my versions of Firefox and the history would be saved if I used both versions but now when version 36.01 came out, its not saving for some reason. Is this a bug? The history is saving during the current session, but say I close out of Firefox and then go back to Firefox, it will still be saved but when I go to my old version of Firefox, the history is saved but then after I close out of that the history on my new current version is all gone and it starts me all fresh, is there a way to get rid of this so that the history will always be saved even if i switch between versions? I could do that before up until Firefox 35.01 but Firefox 36 isnt saving the history from the old version, is this a bug or not? Now I have to create a separate profile for each Firefox so the history I use on the old version is only saved on that version and the history I have on the new Firefox is another profile so that history from the 2nd profile remains but I dont want that. I want to be able to use the same profile so that the same browsing history can be saved using both versions like it was before, I hope people can understand my problem. If not I can further explain, thanks.

    @ the-edmeister, I understand that the 2 versions are completely different, however how come the history was saving fine when I switched between firefox 3.6.28 to the current one which was Firefox 32, 33, 34, 35 etc? Like I'm surprised how come now at Firefox 36 this problem started, Firefox 36 isnt that much different from Firefox 35 but yet Firefox 35 was still saving my browser history from the old 3.6.28 version, my 3.6.28 version never upgrades but the new Firefox keeps upgrading whenever there is a new release out automatically and then all of a sudden when the new version of 36.01 came out all my history was gone, so isnt Firefox 35.01 also very much different from 3.6.28 as much as 36.01 is? I hope you got what I meant, thank you for helping.

  • HT201210 I received an iPad for Christmas that was ex-display, however I am unable to restore it to factory settings using the iTunes restore......any suggestions??

    I received an iPad for Christmas that was ex-display, however I am unable to restore it to factory settings using the iTunes restore......any suggestions??

    If it's a store's demo model then as far as I know only Apple can potentially change it's iOS version to a non-demo version - you've tried Settings > General > Reset > Erase All Content And Settings directly on the iPad ?

  • Is there any way to run without using Runtime.getRuntime().exec()

    I am looking for a way to get my program to fun files on my system without using
    Runtime.getRuntime().exec() because it's causing me nothing but problems, is there any other way to do it without using this command?

    Can't think of an easier way (JNI, etc.).
    If you have not read the following article you really should, it might clear up a lot of your problems with exec():
    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

  • I am unable to get a bullited list when using the synchronized text feature.

    I am unable to get a bullited list when using the synchronized text feature. The option is greyed out and not active. Any tips? Am I doing something wrong?

    This is by default , synchronized text does not alter any style and other visual attributes associated with instance.
    Thanks,
    Sanjit

  • How to execute an application in Solaris using Runtime.getRuntime.exec() ?

    I am currently doing a project which requires the execution of Solaris applications through the use of Java Servlet with this Runtime method - Runtime.getRuntime.exec()
    This means that if the client PC tries to access the servlet in the server PC, an application is supposed to be executed and launched on the server PC itself. Actually, the servlet part is not an issue as the main problem is the executing of applications in different platforms which is a big headache.
    When I tried running this program on a Windows 2000 machine, it works perfectly fine. However, when I tried it on a Solaris machine, nothing happens. And I mean nothing... no errors, no nothing. I really don't know what's wrong.
    Here's the code.
    public void doPost(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException
         response.setContentType("text/html");
         PrintWriter out = response.getWriter();
              Process process;                                                       Runtime runtime = Runtime.getRuntime();
              String com= "sh /opt/home/acrobat/";
              String program = request.getParameter("program");
              try
                        process = runtime.exec(com);
              catch (Exception e)
                   out.println(e);
    It works under Windows when com = "c:\winnt\system32\notepad.exe"
    When under Solaris, I have tried everything possible. For example, the launching of the application acrobat.
    com = "/opt/home/acrobat"
    com = "sh /opt/home/acrobat"I have also tried reading in the process and then printing it out. It doesn't work either. It only works when excuting commands like 'ls'
    BufferedReader read = new BufferedReader(new InputStreamReader(process.getInputStream()));Why is it such a breeze to execute prgrams under Windows while there are so many problems under Solaris.
    Can some experts please please PLEASE point out the errors and give me some advice and help to make this program work under Solaris! Please... I really need to do this!!
    My email address - [email protected]
    I appreciate it.
    By the way, I'm coding and compiling in a Windows 2000 machine before ftp'ing the .class file to the Solaris server machine to run.

    it is possible that you are trying to run a program that is going to display a window on an X server, but you have not specified a display. You specifiy a display by setting the DISPLAY environment variable eg.
    setenv DISPLAY 10.0.0.1:0
    To check that runtime.exec is working you should try to run a program that does not reqire access to an X Server. Try something like
    cmd = "sh -c 'ls -l > ~/testlist.lst'";
    alternatively try this
    cmd = "sh -c 'export DISPLAY=127.0.0.1:0;xterm '"
    you will also need to permit access to the X server using the xhost + command

Maybe you are looking for

  • HP LaserJet Pro M401n issue with 10.10.2

    LaserJet Pro 400 M401n, purchased 10/23/14 and has worked with 10.10.x, connected by USB to MBP (currently with 10.10.2). LJ M401n has worked with 10.10.x until 3/26/15, when after completing a print job and immediately attempting another print job,

  • Dial-up and newly acquired AEBS ~ can't detect modem connection / dial tone

    I've read the threads but have yet to find an applicable solution... Just received the new AExtremeBS, connected and set up as prompted... Not able to get online with my iBook G4 as the modem / dial tone cannot be detected. Obviously, since I'm posti

  • Combined Quantity

    Hello all, We have a HQ that stores liquid in 3 tanks - in order to keep track of quantity in each tank, they have been set up as 3 warehouses in the HQ location. It would be impractical to have our sales staff look up the quantity situation per tank

  • Planned order with exception message 52

    Hello , I created a planned order and when i look at MD04 transaction for the material i can see the planned order but there is an exception 52 indicating No BOM selected , what can be the reason for this exception. I have created a bom , routing and

  • Hi... A simple question of JSP...

    Hi All, Do anybody know how can I pass chinese character from a html to JSP??? should I encode it first? I have tried to pass it as normal character.. but the JSP can't get it correctly... Vincent