Se você quiser armazenar algum texto na íntegra, geralmente é mais fácil com esta sintaxe:
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
)
Em ksh93
, bash
ou zsh
, você também pode:
mycommand=$(<<'EOF'
....
EOF
Em ksh93
que otimiza o exec de cat e o fork, enquanto com bash
apenas o exec (em zsh
, não faz diferença).
Em mksh
:
mycommand=<<'EOF'
...
EOF
E então:
export TOPIC KAFKA_HOME
for TOPIC in "${topics[@]}"; do
xterm -T "$TOPIC" -e "$mycommand" &
done
Aqui, eu usaria ts
para marcar a entrada da hora (ou fazê-lo em gawk
ou perl
se ts
não estiver disponível) em vez desse% ineficientewhile read
loop.
ts '[%F %T | mytopic]'