繁体   English   中英

执行bash脚本并使用Java中的空格传递参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM