我想从Java执行以下CURL命令:
curl -v -X PUT --data-binary" @ configfile.json" -u username:password -D / tmp / grabbit_headers http:// server:port / grabbit / job
(http://和server ...之间的空格按照堆栈溢出指南插入,但不是我的代码的一部分)
我已经关注
http://alvinalexander.com/java/java-exec-processbuilder-process-1,process2和process3
创建使用ProcessBuilder API执行shell命令的java类。
如果我直接在shell上执行CURL命令,它会工作并产生预期的结果。如果我通过Java类使用完全相同的命令,它执行没有任何错误,exitCode = 0,但不产生预期的结果。
此处的预期结果是使用Grabbit(https://github.com/TWCable/grabbit)将内容从一个Adobe AEM实例迁移到另一个实例。
以下是我的主要方法:
public String processBuilderExample() throws IOException, InterruptedException
{
// build the system command we want to run
List<String> commands;
String result="";
/*
* CURL Commands:
* curl -v -X PUT --data-binary "@$configpath" -u $username:$password -D /tmp/grabbit_headers $client$GRABBIT_JOB > /tmp/grabbit
* */
String curl_command="curl -v -X PUT --data-binary \"@"+this.configpath+"\""+" -u "+this.username+":"+this.password+" -D /tmp/grabbit_headers "+this.client+this.GRABBIT_JOB;
commands = new ArrayList<String>(Arrays.asList(curl_command.split(" ")));
result=runCommand(commands);
return result;
}
//@Override
public String runCommand(List<String> commands) throws IOException, InterruptedException
{
// execute the command
SystemCommandExecutor commandExecutor = new SystemCommandExecutor(commands);
int result = commandExecutor.executeCommand();
// get the stdout and stderr from the command that was run
StringBuilder stdout = commandExecutor.getStandardOutputFromCommand();
StringBuilder stderr = commandExecutor.getStandardErrorFromCommand();
StringBuilder finalReturnString=new StringBuilder();
finalReturnString.append("<br/>STDOUT:<br/>");
finalReturnString.append(stdout.toString());
finalReturnString.append("<br/>STDERR:<br/>");
finalReturnString.append(stderr.toString());
return finalReturnString.toString();
}
答案 0 :(得分:0)
使用ProcessBuilder配置重定向。
&#34;&GT;&#34; redirect是shell(sh / bash)的一部分,而不是命令。
有关如何使用流程构建器重定向的信息,请参阅Runtime's exec() method is not redirecting the output。
请参阅&> redirection not working correctly有关其无效的原因。