【问题标题】:How to pass arguments for a bashscript in java?如何在java中为bash脚本传递参数?
【发布时间】:2016-10-16 12:04:18
【问题描述】:

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

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

我把这个 bash 脚本称为;

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 是参数
  • 其他是这些参数的参数

【问题讨论】:

    标签: java bash apache-kafka


    【解决方案1】:

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

    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();
    

    【讨论】:

      【解决方案2】:

      当您调用 command 方法时,您会覆盖传递给 ProcessBuilder 构造函数的 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();
      

      【讨论】:

        【解决方案3】:

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

        字符串[] 选项 = 新字符串[]{
        "--创建",
        "--动物园管理员",
        "zk_host:port",
        "--partitions",
        "1",
        "--主题",
        “测试”,
        "--复制因子",
        “1” };
        TopicCommand.main(选项);

        【讨论】:

        • 可以给个样本删除主题吗?
        • String[] options = new String[]{ "--delete", "--zookeeper", "zk-host:port", "--topic", "your_topic_name"}; TopicCommand.main(options);
        • 感谢完美。我从 kafka 用户列表中询问,他们建议使用 bash 脚本。
        猜你喜欢
        • 2020-09-04
        • 1970-01-01
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        • 2018-02-12
        • 1970-01-01
        • 2012-01-23
        • 2013-06-18
        相关资源
        最近更新 更多