从bash脚本执行复杂的命令

亚历山大·扎克(Alexander Zhak)

我正在使用kafka,并且想监视主题。基本上,我将几个主题输出到stdout并归档以供以后查看。对于单主题监视,我想出了以下命令:

${KAFKA_HOME}/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic mytopic | \
    while IFS= read -r line; do 
      printf '[%s | %20s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "mytopic" "${line}";
    done | tee -a kafka.out

但是,有很多主题需要消耗,因此我正在尝试做类似的事情

consumer=${KAFKA_HOME}/bin/kafka-console-consumer.sh
mapfile -t topics < <(${KAFKA_HOME}/bin/kafka-topics.sh --zookeeper localhost:2181 --list)
for i in ${topics[@]}; do
  xterm -T ${i} -e "my_command" &
done
tail -F kafka.out

my_command上面的命令在哪里它不起作用。我怀疑自己搞砸了引号,但不幸的是我无法弄清楚如何正确应用引号

斯蒂芬·查泽拉斯(Stephane Chazelas)

如果要逐字存储一些文本,使用以下语法通常会更容易:

mycommand=$(cat << 'EOF'
"${KAFKA_HOME}/bin/kafka-console-consumer.sh" --zookeeper localhost:2181 --topic "$TOPIC" |
  while IFS= read -r line; do 
    printf '[%s | %20s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$TOPIC" "${line}";
  done | tee -a kafka.out
EOF
)

ksh93bash或者zsh,你也可以把它:

mycommand=$(<<'EOF'
....
EOF

ksh93优化了猫和铲叉的EXEC,同时与bash只有EXEC(在zsh,这都没有区别)。

mksh

mycommand=<<'EOF'
...
EOF

进而:

export TOPIC KAFKA_HOME
for TOPIC in "${topics[@]}"; do
  xterm -T "$TOPIC" -e "$mycommand" &
done

在这里,我会使用ts到时间戳的输入(或做它gawk或者perl如果ts不可用),而不是说非常低效while read循环。

ts '[%F %T | mytopic]'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash脚本执行多个命令

来自分类Dev

在Python中执行复杂的bash脚本

来自分类Dev

在bash脚本上运行复杂的命令

来自分类Dev

无法在bash脚本中执行shell命令

来自分类Dev

如何从bash脚本执行git命令?

来自分类Dev

bash脚本在ssh之后执行命令

来自分类Dev

Ubuntu Bash脚本执行带空格的命令

来自分类Dev

在bash脚本中执行gcloud命令

来自分类Dev

在bash脚本中执行sed命令

来自分类Dev

BASH脚本-在变量中执行命令

来自分类Dev

Bash脚本从文件读取并执行命令

来自分类Dev

Bash脚本执行带有参数的命令

来自分类Dev

在执行的命令中使用BASH脚本变量

来自分类Dev

与终端或bash脚本执行的命令不同

来自分类Dev

执行bash脚本中使用的命令

来自分类Dev

用于执行多个 Unix 命令的 Bash 脚本

来自分类Dev

在执行后台任务的脚本上执行bash命令替换

来自分类Dev

在执行后台任务的脚本上执行bash命令替换

来自分类Dev

使用sudo执行命令并使用sudo执行Bash脚本

来自分类Dev

从节点脚本执行时如何查看bash命令

来自分类Dev

Bash脚本无法执行Go命令

来自分类Dev

Bash脚本无法从PATH执行命令

来自分类Dev

Bash脚本监视文件更改并执行命令

来自分类Dev

bash-Shell脚本打开多个终端并执行不同的命令

来自分类Dev

如何在bash脚本中使用参数执行SQL命令

来自分类Dev

无法从脚本执行BASH chown命令:非法的组名

来自分类Dev

装入zsh并从bash脚本执行命令

来自分类Dev

bash脚本-执行find命令没有输出

来自分类Dev

使用PHP执行bash脚本和输入命令