【问题标题】:Save kafka broker ids (zookeeper-shell.sh result) to variable in bash script将 kafka 代理 ID(zookeeper-shell.sh 结果)保存到 bash 脚本中的变量
【发布时间】:2017-12-08 15:27:00
【问题描述】:

我想检查代理 ID 是否已在使用中,但我想在脚本中执行此操作。

./bin/zookeeper-shell.sh localhost:2181 <<< "ls /brokers/ids"

给出我想要的结果,但我如何将它保存到变量中以备后用?我感兴趣的是“ls ..”的实际结果。整个输出包括一些饲料:

Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
Node does not exist: /brokers/ids

如果我将结果保存到一个变量中,我实际上只会得到这个素材,最后一行只会打印到屏幕上。

var=$(./opt/kafka/bin/zookeeper-shell.sh localhost:2181 <<< "ls /brokers/ids")

然后 echo $var 给出

Connecting to localhost:2181 Welcome to ZooKeeper! JLine support is disabled WATCHER:: WatchedEvent state:SyncConnected type:None path:null

如何将请求的实际结果获取到变量以供以后使用?

【问题讨论】:

  • 嗯..如果我理解你想要的是在你给出的命令输出的最后一行打印的代理 ID 列表,对吗?据我所知,我的意思是这个命令返回一个包含所有代理 ID 的数组,例如: [0,1,2] 。这是你想要的变量吗?
  • 是的,或者如果没有启动,则变量设置为“节点不存在:/brokers/ids”,这就是它在我的示例中返回的内容

标签: linux bash shell apache-kafka apache-zookeeper


【解决方案1】:

我最终没有使用该脚本,如果有人仍然可以使用该脚本,那将不胜感激,但我最终是如何做到的:

brokerIDs=$(echo dump | nc localhost 2181 | grep brokers/ids | sed 's/\/brokers\/ids\///')

然后去检查

if echo ${brokerIDs[@]} | grep -q -w $newNodeBrokerId; 
then      
    echo "Broker with that id already up";
else      
    echo "Starting Kafka"; 
    # Start kafka service here
fi

【讨论】:

    【解决方案2】:

    您可以使用以下命令获取输出的最后一行:

    ./zookeeper-shell.sh localhost:2181 <<< "ls /brokers/ids" | tail -n 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      相关资源
      最近更新 更多