如何在java中传递bashscript的参数?

如何在java中传递bashscript的参数?,java,bash,apache-kafka,Java,Bash,Apache Kafka,我有以下命令要通过我的java程序运行 /kafka-topics.sh--zookeer zk1.xx.com:2181、zk2.xx.com:2181、zk3.xx.com:2181--delete--topic testTopic 我把这个bash脚本称为like ProcessBuilder builder = new ProcessBuilder(CConstants.KAFKA_TOPIC_SH); builder.command("--zookeeper","zk1.xx.com:

我有以下命令要通过我的java程序运行

/kafka-topics.sh--zookeer zk1.xx.com:2181、zk2.xx.com:2181、zk3.xx.com:2181--delete--topic testTopic

我把这个bash脚本称为like

ProcessBuilder builder = new ProcessBuilder(CConstants.KAFKA_TOPIC_SH);
builder.command("--zookeeper","zk1.xx.com:2181,zk2.xx.com:21811,zk3.xx.com:2181",
                "--delete", "--topic", "testTopic");
        builder.start();
但我得到以下错误

java.io.IOException: Cannot run program "--zookeeper": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) ~[?:1.8.0_66]
    at
如何使用这些参数运行bash脚本

这里

  • --zookeeper,-delet,e--topic是参数
  • 其他参数是这些参数

您得到的错误表明您的第一个参数被解释为命令名。 试试这个:

ProcessBuilder builder = new ProcessBuilder();
builder.command(CConstants.KAFKA_TOPIC_SH,"--zookeeper","zk1.xx.com:2181,zk2.xx.com:21811,zk3.xx.com:2181",
                "--delete", "--topic", "testTopic");
        builder.start();
调用command方法时,覆盖传递给构造函数的命令。构造函数有一个vararg变量,您还可以在其中传递命令参数:

new ProcessBuilder(CConstants.KAFKA_TOPIC_SH, "--zookeeper",
   "zk1.xx.com:2181,zk2.xx.com:21811,zk3.xx.com:2181", "--delete", "--topic",   "testTopic")
   .start();

您可以直接调用kafkaapi,而不是将java命令封装到bash脚本中。比如说,


字符串[]选项=新字符串[]{
“--创建”,
“--动物园管理员”,
“zk_主机:端口”,
“--分区”,
“1”,
“--主题”,
“测试”,
“--复制因子”,
"1" };

TopicCommand.main(选项)

你能给出一个删除主题的示例吗?String[]options=newstring[]{--delete“,“--zookeeper”,“zk host:port”,“--topic”,“your_topic_name”};TopicCommand.main(选项);谢谢你真是太好了。我从kafka用户列表中询问,他们建议使用bash脚本。