将参数作为别名传递以创建 Kafka 主题

将参数作为别名传递以创建 Kafka 主题

我想使用别名创建带有分区和复制数量的 Kafka 主题:

alias tcreate='bin/kafka-topics.sh --create --topic "$@" --partitions "$@" --replication-factor "$@" --zookeeper localhost:2181'

当我运行命令时tcreate 1 1,我收到以下消息:

Exception in thread "main" java.lang.IllegalArgumentException: Only one of --bootstrap-server or --zookeeper must be specified
    at kafka.admin.TopicCommand$TopicCommandOptions.checkArgs(TopicCommand.scala:743)
    at kafka.admin.TopicCommand$.main(TopicCommand.scala:53)
    at kafka.admin.TopicCommand.main(TopicCommand.scala)

如何让它发挥作用?

答案1

假设您使用的是 bash,您应该检查GNU Bash 参考:

($@) 扩展为位置参数,从 1 开始。

此外,别名无法获取位置参数。相反,你应该使用功能与适当的位置参数

这就是你应该定义的:

tcreate(){
bin/kafka-topics.sh --create --topic "$1" --partitions "$2" --replication-factor "$3" --zookeeper localhost:2181
}

以便每个参数在命令中的特定位置被替换。我还建议对 shell 脚本文件使用完整路径,因为相对路径高度依赖于当前目录,并且该函数只能在特定的当前目录中工作。

此外,您的示例命令tcreate 1 1也会产生错误,因为如果您输入正确,则缺少第三个参数。

答案2

这对我有用:

alias ktc='f(){ bin/kafka-topics.sh --create --topic "$1" --partitions "$2" --replication-factor "$3" --zookeeper localhost:2181;  unset -f f; }; f'

然后我在终端中提供了命令:

$ ktc t_name  1 1

相关内容