1

Я все еще новичок в кормлении из бутылочки, так что полегче. Я гуглил себя так далеко, но не могу найти ответ.

Я запускаю программу, которая выводит данные CSV, и передает его в log.csv

Я ищу способ, чтобы вывод по конвейеру содержал дату / время, когда он был создан.

Прямо сейчас команда выглядит так (hand key'd каждое утро, пока нет crontab, пока я не получу эту работу)

rtlamr -format=csv -msgtype=scm | tee /home/jonboy545/energy/logs/3-16-18_7_30.csv

Я использую | tee , так что я все еще могу видеть вывод на терминал, а также войти в файл.

Итак, как я могу направить вывод в динамическое имя файла? У меня есть простой сценарий bash, который будет выводить текст, но как мне сказать rtlamr | скрипт bash для генерации имени файла?

Вот скрипт с именем "log_energy.sh" для создания имени текстового файла:

#!/bin/bash
today=`date '+%m_%d__%H_%M_%S'`;
filename="/home/jonboy545/energy/logs/$today.csv"
echo $filename;

Если вы запустите ./log_energy.sh то он просто выведет текст, который вы ожидаете:

/home/jonboy545/energy/logs/03_16__17_30_39.csv

Так что мое глупое мышление что-то вроде этого (что, очевидно, не работает)

rtlamr -format=csv -msgtype=scm | tee /home/jonboy545/./log_energy.sh

Теперь, когда я думаю об этом, может быть проще создать скрипт, который делает все это. Так как то так?

#!/bin/bash
today=`date '+%m_%d__%H_%M_%S'`;
filename="/home/jonboy545/energy/logs/$today.txt"
/usr/bin/rtlamr -format=csv -msgtype=scm | tee $filename;

Думая, что я, возможно, только что ответил на свой собственный пост, но я уверен, что скрипт выше что-то не так с ним.

2 ответа2

0

Итак, я думаю, что я ответил на свой вопрос, или, вернее, я заставил его работать ... неправильно указала местоположение программы, но это просто семантика.

log_energy.sh:

#!/bin/bash
today=`date '+%m_%d__%H_%M_%S'`;
filename="/home/jonboy545/energy/logs/$today.txt"
/home/jonboy545/GoCode/bin/rtlamr -format=plain -msgtype=scm | tee $filename;

Это дает ожидаемые результаты. Если я запускаю ./log_energy.sh, я получаю вывод терминала на экране, и имя файла создается с датой.

Прочь, чтобы узнать о crontabs сейчас! В частности, как сделать так, чтобы срок действия скрипта истек в определенное время, а затем снова начался. Больше гуглить !!!!

В любом случае, спасибо за помощь, МОЖЕТ кто-то столкнется с этим, так как я клянусь, что я погуглил все это и не смог найти ответ, но теперь я вижу, что я все думал неправильно.

0

Вы используете bash, так что вы можете использовать процесс и подстановку команд.

Из заголовка я подумал, что вы можете добавить дату в начало вывода файла журнала, который будет использовать что-то вроде этого:

$ program |while read pong; do echo $pong; echo $(date):\ $pong >> logfile; done

Или добавление даты к имени файла перенаправит на >> "$(date)-logfile"

Но похоже, что вы просто хотите использовать имя файла с tee:

rtlamr -format=csv -msgtype=scm | tee "$(date '+%m_%d__%H_%M_%S')"

Если вы работаете как пользователь, то этот файл должен быть таким же, как и любой другой файл, созданный вашим пользователем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .