gpt4 book ai didi

java - 在ProcessBuilder中添加双引号符号

转载 作者:行者123 更新时间:2023-12-01 08:45:32 24 4
gpt4 key购买 nike

我正在使用ProcessBuilder构建我的命令。我想在这篇文章之后构建我的命令:How do I launch a java process that has the standard bash shell environment?

也就是说,我的命令是这样的: /bin/bash -l -c "my program"

但是,我很难将双引号传递到 ProcessBuilder 中,如new ProcessBuilder(List<String> command)如果我 native 向 List<String> command 添加双引号,则无法表达该命令。 ProcessBuilder将双引号识别为参数。

相关代码:

    //Construct the argument
csi.add("/bin/bash");
csi.add("-l");
csi.add("-c");
csi.add("\"");
csi.add(csi_path);
csi.add(pre_hash);
csi.add(post_hash);
csi.add("\"");

String csi_output = Command.runCommand(project_directory, csi);

public static String runCommand(String directory, List<String> command) {


ProcessBuilder processBuilder = new ProcessBuilder(command).directory(new File(directory));
Process process;
String output = null;
try {
process = processBuilder.start();

//Pause the current thread until the process is done
process.waitFor();

//When the process does not exit properly
if (process.exitValue() != 0) {

//Error
System.out.println("command exited in error: " + process.exitValue());

//Handle the error
return readOutput(process);
}else {

output = readOutput(process);
System.out.println(output);
}

} catch (InterruptedException e) {
System.out.println("Something wrong with command: " +e.getMessage());

} catch (IOException e) {
System.out.println("Something wrong with command: " +e.getMessage());
}

return output;
}

Ps:我确实想使用ProcessBuilder而不是Runtime.getRuntime.exec()因为我需要在特定目录中运行该命令。我需要使用ProcessBuilder.directory() .

Ps:命令运行后会以2退出。看来系统可以识别这个命令。奇怪的是用2退出后没有任何输出。

Ps:预期的命令是/bin/bash -l -c "/Users/ryouyasachi/GettyGradle/build/idea-sandbox/plugins/Getty/classes/python/csi 19f4281 a562db1" 。我打印了该值,它是正确的。

最佳答案

解决问题的最佳方法是首先构建命令并将其传递到列表。所以,不要做这一切。

csi.add("/bin/bash");
csi.add("-l");
csi.add("-c");
csi.add("\"");
csi.add(csi_path);
csi.add(pre_hash);
csi.add(post_hash);
csi.add("\"");

您应该首先构建命令

StringBuilder sb = new StringBuilder();
sb.append("/bin/bash -l -c");
sb.append("\""+csi_path+pre_hash+post_hash+"\"");// add whitespace between the varaible, if required.
System.outprintln(sb.toString()); //verify your command here

csi.add(sb.toString());

此外,验证上述所有变量值。

关于java - 在ProcessBuilder中添加双引号符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com