[英]Pass a string with spaces to an execute command in Java to execute a bash script
[英]Execute bash script and pass arguments with spaces from java
我知道有很多关于从Java执行命令的文章,但我无法使它正常工作。 这是我要尝试的操作,我有一个bash脚本,它接收2个参数,可能有也可能没有空格,然后从Java中执行脚本并像这样传递参数(我将参数括起来带引号,并用反斜杠转义):
String cmd = "/opt/myScript \"/opt/myPath1\" \"/opt/myPath2 with spaces\"";
Runtime rt = Runtime.getRuntime();
rt.exec(cmd);
我也尝试使用如下的ProcessBuilder
类:
String myScript = "/opt/myScript";
String myArg1= "/opt/myPath1";
String myArg2 = "/opt/myPath2 with spaces";
ProcessBuilder pb = new ProcessBuilder(myScript , myArg1, myArg2);
pb.start;
没有空格的参数可以成功接收,但是第二个参数仍然存在问题。
我以为ProcessBuilder
类可以处理空格,但似乎缺少了一些东西。
我不确定是否有事要做,但以防万一,这是我的脚本:
#!/bin/bash
PATH=$PATH:$1
gnome-terminal --working-directory $2
$1
和$2
是从Java发送的参数。
Runtime.exec()是一个重载方法。 有几种可能的方法来调用它。 调用exec(String command)
执行指定的string命令,但此处的参数由空格分隔。 方法exec(String[] cmdarray)
执行指定的命令和参数。 还有其他exec()
变体,但最适合您的是
String cmd[] = new String[] {"/opt/myScript", "/opt/myPath1", "/opt/myPath2 with spaces" };
Runtime rt = Runtime.getRuntime();
rt.exec(cmd);
可以使用ProcessBuilder也可以用于参数传递。 我认为唯一的错误是pb.start
之后缺少括号。
最后但并非最不重要的一点是,该脚本有一个主要错误。 它不包含围绕$2
队列。 它应该是
#!/bin/bash
PATH="$PATH:$1"
gnome-terminal --working-directory "$2"
遇到同样的麻烦,终于解决了:
Runtime.getRuntime().exec(new String[]{"bash", "-c", <command with spaces>});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.