Java:从字符串数组创建命令

标签 java shell cmd escaping exec

我有一个字符串数组,其中包含一个单独的命令 - 每个参数位于不同的单元格中。

我想要一种获取字符串数组并使用它来准备语义合法的完整命令的方法(即处理特殊字符,例如 <space> 、大括号等)。然后,它应该将完整的命令作为一个字符串返回

这是我想要的用法的一个非常简单的示例(如果我有 createCommand() 方法):

String[] cmdParts = {"ls", "-l", "/tmp /home"};
String cmd = createCommand(cmdParts);

在上面的例子中,我期望 cmd包含字符串 ls -l "/tmp /home"

有没有一种方法可以做到这一点,或者类似的方法?

最佳答案

您可以循环遍历数组并轻松地自己完成。我无法立即想到任何事情

String createCommand(String[] cmdParts) {

  StringBuilder sb = new StringBuilder()
  for(String cmdPart : cmdParts) {
    if (sb.length() > 0) {
      sb.append(" ");
    }
    sb.append(cmdPart);
  }
  return sb.toString();
}

尽管它不会留下尾随或前导空格。

另请注意:

{"ls", "-l", "/tmp /home"}

不会导致

ls -l "/tmp /home"

您需要将转义的引号添加到最后一个字符串。

{"ls", "-l", "\"/tmp /home\""}

关于Java:从字符串数组创建命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665806/

相关文章:

Java:以管理员身份在新的 cmd.exe 中执行命令

batch-file - 在目录中查找特定的 *.exe 文件并使用参数运行应用程序

Windows CMD 批处理 : concatenating variable NAME in a loop

java - 是否应该有很多 onTouchListener?

java - Linux 上的 Subversion 标签填充自动更新

bash - 为什么正确的 shell 脚本会给出包装/截断/损坏的错误消息?

java - 在 Java 中执行 shell 脚本并读取输出

java - 代理 servlet 在 HttpClient.execute() 上挂起

java - 出现 "non static method cannot be referenced from a static context"错误的问题

bash - 为什么 "docker run"错误与 "no such file or directory"?