从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脚本中使用参数执行SQL命令

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

bash脚本在ssh之后执行命令

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Bash脚本执行多个命令

来自分类Dev

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

来自分类Dev

在bash脚本中执行gcloud命令

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Bash脚本无法执行Go命令

来自分类Dev

Bash脚本无法从PATH执行命令

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在bash脚本中执行sed命令

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

执行bash脚本中使用的命令

来自分类Dev

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

来自分类Dev

在Python中执行复杂的bash脚本

来自分类Dev

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