4

I want to output two commands to a file. I want the exact time (date) AND temperature (sensors) to go to file every 5 minutes. I know how to output one command to a file, but two? How to write such script?

1
  • Please clarify if you are asking to put the output of a command into two files, or if you are asking to put the output of two commands into a file.
    – retracile
    Aug 14, 2009 at 2:03

7 Answers 7

16

Something like this? (In a loop, cron, or whatever you're currently using.)

(date; my_sensor_command) >> log_file
2
  • 4
    +1 for figuring out what the question was...
    – Insyte
    Aug 14, 2009 at 6:44
  • +1 simple and easy, output of x commands to one > file Aug 26, 2022 at 12:22
9

Group all commands in parenthesis, because that will execute them in a sub-shell which you easily can redirect the output from:

 while sleep 5m
 do
         (date +%Y-%m-%d_%H:%M | tr -d '\012'; echo -n ' '; \
         /etc/rc.d/init.d/lm_sensors status | grep '^CPU Temp') >> /your/log/file

 done
5

If I understand your question right--you want to output two values to the same file--then this might be what you are looking for:

TIME="`date`"
SENSOR="56"

echo "$TIME $SENSOR" >> /path/to/a/file
2

Maybe I am misunderstanding the question, but it looks like all the answers are appending to one file. I read your question to be that you want the same output in 2 files. If that was what you are looking for, tee is a way to accomplish that:

echo "Stuff to output"|tee -a file1 file2

2

I know it's and old post but i needed to output the result of over 10 commands to a file, to work with this file and with @retracile answer i done this (simple & easy):

#!/bin/bash

(
command1
command2
command3
MORE COMMANDS
) > OUTPUT_FILE

cat OUTPUT_FILE

# WORK WITH OUTPUT_FILE
...
1
  • 1
    Note that you can simplify command > OUTPUT_FILE ; cat OUTPUT_FILE by using command | tee OUTPUT_FILE.
    – HBruijn
    Aug 26, 2022 at 12:38
1

Refering to hlovdal post, you can set a cron like this:


$ crontab -e

*/5 * * * * (echo date +%Y%m%d%H%M%S | tr -d '\012'; echo -n ' '; sensors | grep "CPU Temp:" | awk '{ print $3 }' )>> /var/log/sensors.log

1
  • 1
    Using both grep and awk is very often not neccessary. "grep "CPU Temp:" | awk '{ print $3 }'" can be shortened to "awk '/CPU Temp:/{ print $3 }'"
    – hlovdal
    Aug 15, 2009 at 12:28
0

Assuming you want the date and value on the same line:

sepChar='_'  #Separator character, for later processing
echo "$(date '+%Y%m%d %H%M%S')$sepChar$(mySensorCmd)" >> outputFile.log

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.