Я пытаюсь использовать пару сценариев bash, которые должны отображать некоторые данные с помощью инструмента iperf3. Я нашел упомянутые скрипты в GIT хранилище нескольких лет. У меня есть эта последовательность:
...
echo \$data \<\<EOD
for j in *.json
do
dt=$(basename "$j" .json)
if jq -e '.error' < $j
then
echo $(readlink -f $j) has an error, skipping >&2
cat $j >&2
continue
fi
sent=$(jq '.end.sum_sent.bits_per_second / 8' < "$j")
received=$(jq '.end.sum_received.bits_per_second / 8' < "$j")
echo "$dt" "$sent" "$received"
done
echo EOD
....
Я понимаю, что здесь код пытается создать heredo c файл, содержащий for ... done l oop и сохранить в переменной с именем "data «результат его исполнения. Однако это не работает, и bash помечает следующую ошибку:
$data <<EOD
^
line 0: invalid command
Итак, у меня есть несколько вопросов:
- Этот синтаксис должен работать и, если да, почему это не так в моем случае?
- Признавая, что приведенный выше синтаксис не должен работать и что скрипт, который я нашел, каким-то образом поврежден, как я могу переписать его так, чтобы сохранить в переменных данных Результат выполнения данного здесь c?
Заранее большое спасибо,
Николас ДУМИНИЛ
Я обновляю пост со всей код:
#!/bin/bash
# Grateful for the answers on http://stackoverflow.com/questions/34447348
shopt -s nullglob
echo \$data \<\<EOD
for j in *.json
do
dt=$(basename "$j" .json)
if jq -e '.error' < $j
then
echo $(readlink -f $j) has an error, skipping >&2
cat $j >&2
continue
fi
sent=$(jq '.end.sum_sent.bits_per_second / 8' < "$j")
received=$(jq '.end.sum_received.bits_per_second / 8' < "$j")
echo "$dt" "$sent" "$received"
done
echo EOD
cat << END
set term svg size 800,600 fname "Helvetica Neue" fsize 9 rounded dashed
set title "Generated by https://github.com/kaihendry/iperf3chart"
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set boxwidth 0.9
set xtic rotate by -45 scale 0 font ",8"
set key top left
# Convert bytes to megabytes
set format y '%.0s %cB'
plot \$data using 2:xticlabels(strftime("%H:%M %Y-%m-%d",column(1))) t 'up', '' u 3 t 'down'
END