可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.
回答1:
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();
回答2:
Use this:
final StringBuilder sb = new StringBuilder("test.sh"); sb.append(" \"/path to/my/text file\"");
回答3:
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());
回答4:
Your approach is correct you just need to add a space (" ")
before parameters and escape the "/" and " "
characters in the parameters