Тем же путем Вы были бы время любая другая команда оболочки: используйте time
команда.
$ time pg_restore ...
real 1m0.000s
user 1m0.000s
sys 0m0.000s
Здесь, real
прошедшая стена, показывают время, которое является, вероятно, единственным значимым значением, так как большая часть работы делается в отдельном процессе (сервер PostgreSQL).
Вместо того, чтобы построить строку и присоединение к нему, просто создайте строку напрямую:
➜ ~ DATE="1234"
➜ ~ TEMP="15"
➜ ~ STR="$DATE;$TEMP"
➜ ~ echo $STR
1234;15
Первая проблема в том, что у вас есть пробел после =
:
TEMP= grep -o [1-9][0-9]\.[0-9] /tmp/temp.txt
Это неправильно и нарушает ваш скрипт. Следующая проблема заключается в том, что Вы присваиваете сами команды, как строки, переменным, а не их вывод:
$ foo=date
$ echo $foo
date
Для выполнения команды и сохранения ее вывода в переменную, Вам необходимо использовать $(command)
или `command`
:
$ foo=$(date)
$ echo $foo
Mon May 25 19:09:11 EEST 2015
У Вас также есть различные другие биты и куски, которые могут быть улучшены. Попробуйте вместо этого:
#!/usr/bin/env bash
vcgencmd measure_temp > /tmp/temp.txt
## Avoid using UPPER CASE variable names since they
## can conflict with environmental variables.
temp=$(grep -o "[1-9][0-9]\.[0-9]" /tmp/temp.txt)
date=$(date +"%Y-%m-%d %H:%M")
## No need for another variable
printf "%s;%s\n" "$date" "$temp" >> /home/pi/temp_hist.csv
Предполагая, что vcgencmd measure_temp
создаст единственное число с фиксированной точкой, эта команда может делать то, что вы хотите:
temp=$( vcgencmd measure_temp | grep -o '[0-9]*\.[0-9]' )
date "+%Y-%m-%d %H:%M;${temp}" >> /home/pi/temp_hist.csv
Я отчасти к ответу Яниса. Тем не менее, вы можете найти Rrdtool
лучший вариант для такого рода вещи. Он записывает его значения в предварительно определенных временных интервалах (или NV, если пропустить временное интервал). Затем он может использоваться для создания некоторых очень хороших графов или выводить данные в XML или TSV. Вот стартер-учебник: http://oss.oetiker.ch/rrdtool/tut/rrd-beginners.en.html