1

I am executing a shell script from Java program. I have implemented it using Runtime class. Below is the code I implemented

final StringBuilder sb = new StringBuilder("test.sh");
sb.append("/path to/my/text file");

final Process p = Runtime.getRuntime().exec(sb.toString());

Here sb is string buffer object where I append my parameters and use it in exec method. But the problem is the parameter I pass "/path to/my/text file" is considered as 4 parameters

/path
 to
/my/text
 file

But if run in shell as test.sh "/path to/my/text file" which is taken as single parameter. How can I achieve the same using Java code, where I need to consider this path with spaces as single argument. Any please will be really appreciable.

3 Answers 3

5

Use ProcessBuilder , it's what it's designed for, to make your life easier

ProcessBuilder pb = new ProcessBuilder("test.sh", "/path", "/my/text file");
Process p = pb.start();
Sign up to request clarification or add additional context in comments.

2 Comments

Why there are 2 arguments "/path" and "/my/text file" ? Shouldn't be new ProcessBuilder("test.sh", "/path to/my/text file")
No, each parameter MUST be separated, other wise they will send to the process as a single parameter, that's why the last parameter doesn't need to be escaped in quotes
0

To recreate the command you run in shell manually, test.sh "/path to/my/text file", you will need to include the quotes.

final StringBuilder sb = new StringBuilder("test.sh");
sb.append(" \"/path to/my/text file\""); //notice escaped quotes
final Process p = Runtime.getRuntime().exec(sb.toString());

Comments

0

Your approach is correct you just need to add a space (" ") before parameters and escape the "/" and " " characters in the parameters

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.