When you run a command at the shell command prompt, things like ~
expansion, quote handling, globbing, $variable expansion, input/output redirection and piping and son on are all handled by the shell ... before it asks the operating system to run the program(s) for you.
When you run a command using Runtime.exec
, you have three choices:
- write the command without any shell "funky stuff"
- replicate what the shell would do in Java; e.g. replace leading tildes with the appropriate stuff1, or
use exec to launch a child shell to run the command; e.g.
Runtime.getRuntime().exec("/bin/sh", "-c", "~/test/bin/runScript_sh");
That is possibly overkill in a simple case like this. But if you are trying to do more complicated things then a child shell can really simplify things.
1 - In fact fully shell compatible handing of tildes is fairly complicated.