Проблема заключается в заключении строк в текстовые поля в кавычки.
Используйте здесь -документ (, который позволит вам написать более красивое выражение):
sqlite3 database <<END_SQL
UPDATE stats
SET downspeed=$DN,
upspeed=$UP,
downlocalip="$downlocalip",
downremoteip="$downremoteip",
uplocalip="$uplocalip",
upremoteip="$upremoteip"
WHERE primkey=1
END_SQL
Предполагается, что у вас есть полный контроль над значениями в переменных, поэтому вы знаете, что они должным образом очищены и не создают уязвимости SQL-инъекций.
Из комментариев:
Выполнение этого через SSH:
ssh user@server sqlite3 database <<END_SQL
UPDATE stats
SET downspeed=$DN,
upspeed=$UP,
downlocalip="$downlocalip",
downremoteip="$downremoteip",
uplocalip="$uplocalip",
upremoteip="$upremoteip"
WHERE primkey=1
END_SQL
Вы :отображаете строку, затем выполняете команду для отображения следующей.
Вам необходимо :выполнить все команды (, не касаясь дисплея )и сохранить результаты в 4 переменных, затем очистить и отобразить эти 4 результата одновременно.
Если я изменю ваш сценарий, попробуйте:
#!/bin/bash
while sleep 1; do
# facultative?# tput cup 0 0
ccab="$(npe ?AI1)"
cane="$(npe ?AI2)"
ctemp="$(npe ?AI3)"
ctemp2="$(npe ?AI4)"
clear
printf "%21s %6d \n" \
"Célula calibrada: " "$ccab" \
"Anemómetro: " "$cane" \
"Célula temperatura: " "$temp" \
"Célula temperatura: " "$temp2"
done
Здесь происходит длительное выполнение 4 запросов без изменения отображения, затем отображение очень быстро обновляется и отображается все сразу с 4 новыми значениями.
Это делает 50 строк без мерцания, поскольку использует tput для обновления каждой строки отдельно. Чтобы доказать это, я добавил 0,01 между каждой строкой.
Запуск скрипта с аргументом y показывает примеры того, что использует окно терминала для позиционирования курсора. Я жестко -закодировал свои побеги в эхе. Ваш может быть другим. Для переносимости вы должны использовать tput для динамического создания последовательностей. Для повышения производительности вы должны заранее получить все последовательности tput, которые вам когда-либо понадобятся для вашего приложения, и сохранить их в оболочке. Кроме того, как только у вас появится фиксированный текст, просто измените переменные части.
Обратите внимание, что позиции экрана начинаются с (0, 0 )в tput args. Кроме того, ведущие нули в экранных командах интерпретируются как восьмеричные, поэтому я переформатирую видимый номер строки с помощью printf. Также вежливо переместить курсор в сторону (, например, на (0,0 ))после обновления.
#! /bin/bash
#.. See what a CUrsor Position is on the current terminal.
[[ "${1}" == y ]] && {
for r in {0..19}; do
tput cup ${r} 15 | od -An -t ax1
done
exit
}
tput clear
while sleep 1; do
for k in {1..50}; do
sleep 0.01
RW=$( printf '%.2d' ${k} )
TS=$(date "+%Y-%m-%d %H:%M:%S.%N")
echo -n -e "\e[${k};1H${RW} ${TS}"
done
echo -n -e "\e[52;1H"
done