2017-07-05 2 views
0

ブローカーIDが既に使用されているかどうかを確認したいが、スクリプト内でこれを実行したい。bashスクリプトでkafkaブローカーID(zookeeper-shell.shの結果)を変数に保存

./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") 

そしてエコーの$ varは

私は後で使用するための変数への要求の実際の結果になるだろうどのように
Connecting to localhost:2181 Welcome to ZooKeeper! JLine support is disabled WATCHER:: WatchedEvent state:SyncConnected type:None path:null 

を与えますか?

+0

をブローカーIDリストでありますそれは正しいコマンドの出力の最終行に表示されますか?私はこのコマンドが覚えている限り、すべてのブローカーのIDを持つ配列を返します:[0,1,2]。これはあなたが変数として望むものですか? –

+0

はい、そうでない場合、変数は "ノードが存在しない:/ broker/ids"に設定されています。これは私の例で返されます – Sunny

答えて

0

あなたは使用して出力の最後の行を取得することができます:私はあなたが欲しいものを理解している場合..

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

誰かがまだスクリプトを利用する方法を持っている場合、私は理解されるであろうと、スクリプトを使用していないことになったが、私はそれをやってしまった方法:

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 
関連する問題