Friday, January 14, 2011

Bash - How to output two commands to file?

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?

  • 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
    
  • Something like this? (In a loop, cron, or whatever you're currently using.)

    (date; my_sensor_command) >> log_file
    
    Insyte : +1 for figuring out what the question was...
    From retracile
  • 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
    
    From hlovdal
  • 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

    From Alex
  • 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

    hlovdal : 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 }'"
    From mezgani

0 comments:

Post a Comment