<分区>
我正在寻找一个库 (Java/Scala),给定一个命令和一个参数列表会生成一个 String
,如果将其粘贴到 bash 终端中,将执行给定的命令及其所有参数 (正确转义)。
我知道 java.lang.ProcessBuilder
类(class)。如果我想将命令作为子进程执行,它会很好用。相反,我正在寻找的是一个可以生成命令的字符串表示形式的库。
<分区>
我正在寻找一个库 (Java/Scala),给定一个命令和一个参数列表会生成一个 String
,如果将其粘贴到 bash 终端中,将执行给定的命令及其所有参数 (正确转义)。
我知道 java.lang.ProcessBuilder
类(class)。如果我想将命令作为子进程执行,它会很好用。相反,我正在寻找的是一个可以生成命令的字符串表示形式的库。
最佳答案
我通常不会建议人们尝试编写自己的转义器,但在这种情况下这并不可怕,因为 bash 单引号字符串将正确地包含除 NUL 字节和嵌套单引号之外的每个字符:
public static String bashEscape(String[] arguments) {
StringBuilder sb = new StringBuilder();
for(String arg : arguments) {
if (arg.indexOf(0) != -1) {
throw new IllegalArgumentException("Shell arguments can't represent NUL bytes");
}
sb.append("'").append(arg.replaceAll("'", "'\\\\''")).append("' ");
}
return sb.toString();
}
这正确地转义了:
*?![]()|<>&;$
和空格唯一需要注意的是,当您将字符串传递给它时,您和您的 shell 需要就字符编码达成一致。
关于java - 在 Java 中生成带参数的 linux 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54930862/