我想使用别名创建带有分区和复制数量的 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