Archivo

Archivo para abril, 2009

Curiosidad en bash: Valores de salida de comandos “entubados”

Miércoles, 22 de abril de 2009 Comments off

Hoy me encontré con un problema en un simple script que hice para backupear algunas bases de datos MySQL:

#!/bin/sh
# Hace dumps de MySQL de las BBDDs especificadas

DBS="db1 db2 dbN"
DUMPDIR="/root/mysql-dumps"
ADMIN="alertas@midominio.com"
REPORT="/tmp/mysql-dump-bases-importantes.$$.log"
ERRORS=0
HOSTNAME=`hostname -f`

cd $DUMPDIR

for db in $DBS
do
        /usr/bin/mysqldump -Q $db | gzip -9 > dump-$db-`date +"%F_%T"`.sql.gz
        ERR=$?
        if [ "$ERR" == "0" ]; then
                echo "Dumping database '$db' done OK" >> $REPORT
        else
                echo "Dumping database '$db' FAILED" >> $REPORT
                ERRORS=1
        fi
done

if [ "$ERRORS" == "0" ]; then
        cat $REPORT | mail -s "MySQL Dumps on $HOSTNAME: OK" $ADMIN
else
        cat $REPORT | mail -s "MySQL Dumps on $HOSTNAME: ERRORS" $ADMIN
fi

rm $REPORT

Este script usa mysqldump para sacar una imágen de cada base de datos, y supuestamente guarda en la variable $ERR el valor de salida para enterarnos en caso que haya problemas, y mandar así el mensaje adecuado en el reporte.

El problema que tiene este script es que la variable $? retorna el valor de salida del último comando en un pipe, en mi caso corresponde a la salida del gzip, que siempre sale correctamente (al menos en este script). Entonces ¿cómo nos enteramos que pasó con un comando anterior en la cadena?

Bash (no conozco otros shells) tiene una variable $PIPESTATUS, que es un array con los valores de salida de una serie de comandos encadenados, por lo tanto lo único que hizo falta para corregir este programa, es reemplazar la línea que dice:

ERR=$?

…por lo siguiente:

ERR=${PIPESTATUS[0]}

El subíndice 0 corresponde al primer valor del array, y que coincide con el primer comando de la cadena de comandos.

¡Espero les sirva en algún momento!

Categories: GNU/Linux, Programación Tags: , ,

La cocina es como el software, se comparte entre amigos!

Lunes, 13 de abril de 2009 3 comentarios

Para romper el extenso silencio de mi blog, voy a comentarles sobre un sitio nuevo que se está gestando y que a muchos de ustedes les puede llegar a interesar.

Muchas veces hemos comparado el software con una receta de cocina, y el acto de compartir esa receta para probarla, mejorarla y volverla a compartir como la publicación del software con alguna licencia libre.

Esta vez no voy a hablar de software sino de las recetas de cocina, y es que no son recetas cualquieras, sino las recetas que la madre de mi amigo Cristian usa para crear sus impresionantes platos, delicias que muchos hemos tenido el privilegio de saborear.

El sitio está planteado a modo de blog, pero además nos presenta en cada receta las características y tiempos de preparación, para poder planificar con tiempo en el caso de intentar emular la gran chef :-)

Bueno, eso es todo, les dejo el enlace: Recetas simples y deliciosas

Categories: General Tags: