Running shell script from java code and pass arguments

匿名 (未验证) 提交于 2019-12-03 00:59:01

问题:

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



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!