#! /bin/bash # Script que lee los ficheros ".txt" y ".dig" que hay en el directorio # actual, haciendo una lista, y permite verlos y responderlos. Las # respuestas se generan con un fichero de igual nombre, y extension # ".re". Si el fichero ya existe, entonces se edita el que ya existe : ${EDITOR:=/bin/vi} # Si la variable EDITOR no tiene nada, por defecto utilizamos el vi # para editar los ficheros de texto VERSION='0.5' TEMPFILE="/tmp/correotmp$$" MENSAJE='[numero] - ver/editar archivo con ese numero r - responder' MENSAJE2='q - salir de correo b - borrar archivo l - listar archivos' MASCARA='*.txt *.dig' # Borramos los ficheros temporales si nos mandan una señal de terminación o # algo por el estilo trap 'rm -f $TEMPFILE; rm -f "/tmp/temporal$$"' 1 2 15 if ! ls *.txt &>/dev/null; then if ! ls *.dig &>/dev/null; then echo "correo v$VERSION" echo "ERROR: No hay ficheros con extension $MASCARA en el directorio actual" exit -1 fi fi ls $MASCARA >$TEMPFILE 2>/dev/null numfich=`cat $TEMPFILE | wc -l` cat -n $TEMPFILE | more # Aqui empezamos el bucle principal del programa, donde se leen las # teclas del usuario y se ejecutan las ordenes correspondientes until [ "$tecla" = "q" ] do echo "$MENSAJE" echo "$MENSAJE2" read tecla # Lo de 2> es para que no de error de que $tecla no es entero if [ "$tecla" -gt "$numfich" ] 2>/dev/null; then echo "Pulse un numero menor o igual que $numfich, 'r' para" echo "responder a algun mensaje o 'q' para salir" continue # Saltamos a la siguiente iteracion fi # fin de if [ "$tecla" -gt "$numfich" ] if [ "$tecla" -le "$numfich" ] 2>/dev/null; then orden="awk 'BEGIN { contador=1; indice=ARGV[2]; ARGC=2 } { if (contador == indice) { print; exit } else contador++ }' $TEMPFILE $tecla" eval fichero=\`$orden\` echo "Editando $fichero..." sleep 1 $EDITOR $fichero fi case "$tecla" in b) # Opcion de borrar un archivo echo "¿Qué fichero desea borrar?" read tecla if [ "$tecla" -gt "$numfich" ] 2>/dev/null; then echo "Pulse un numero menor o igual que $numfich" continue fi # fin de if [ "$tecla" -gt "$numfich" ] if [ "$tecla" -le "$numfich" ] 2>/dev/null; then orden="awk 'BEGIN { contador=1; indice=ARGV[2]; ARGC=2 } { if (contador == indice) { print; exit } else contador++ }' $TEMPFILE $tecla" eval fichero=\`$orden\` echo "¿Está seguro de que quiere borrar el fichero $fichero?" read tecla if [ "$tecla" = "s" ]; then rm $fichero echo "Fichero $fichero borrado" # Actualizamos la lista de ficheros ls $MASCARA >$TEMPFILE 2>/dev/null numfich=`cat $TEMPFILE | wc -l` fi fi ;; l) # Opcion de listar los archivos de nuevo if [ ! -f $TEMPFILE ]; then # Si ha pasado algo con el fichero temporal, lo creamos de nuevo ls $MASCARA >$TEMPFILE numfich=`cat $TEMPFILE | wc -l` fi clear cat -n $TEMPFILE | more;; r) # Opcion de responder a un mensaje echo "?A que mensaje desea responder?" read tecla if [ "$tecla" = "" ]; then continue fi if [ "$tecla" -gt "$numfich" ]; then echo "Pulse un numero menor o igual que $numfich" continue fi orden="awk 'BEGIN { contador=1; indice=ARGV[2]; ARGC=2 } { if (contador == indice) { print; exit } else contador++ }' $TEMPFILE $tecla" eval fichero=\`$orden\` # Antes, en esta línea, donde pone ahora '.re', ponía # '\\.re' orden="awk 'BEGIN { contador=1; indice=ARGV[2]; ARGC=2 } { if (contador == indice) { sub(/\.dig/, \".re\"); sub(/\.txt/, \".re\"); print; exit } else contador++ }' $TEMPFILE $tecla" eval fichre=\`$orden\` # Ahora tenemos que comprobar si el fichero no existe. Si es # asi, entonces lo tenemos que crear if [ ! -f "$fichre" ]; then echo "Creando respuesta $fichre..." sed 's/^/> /' $fichero >$fichre creado=0 # Creado = verdadero else echo "Editando archivo $fichre con $EDITOR" creado=1 # Creado = falso fi sleep 2 orden="ls -l --full-time $fichre | awk '{ print \$7\$8\$9 }'" eval fecha=\`$orden\` # Salvamos la longitud inicial en una variable $EDITOR $fichre # Si el fichero de respuesta queda igual que estaba antes de # editarlo, y fue creado (no estaba antes), lo borramos eval fechanueva=\`$orden\` if [ "$fecha" = "$fechanueva" -a "$creado" = 0 ]; then rm $fichre fi;; esac done # Escribimos el fichero lista.log, y borramos el fichero temporal # ls *.re >$TEMPFILE 2>/dev/null # # if [ -f lista.log ]; then # awk '$0 !~ "\.re" { print }' lista.log >"/tmp/temporal$$" # cat $TEMPFILE "/tmp/temporal$$" >lista.log # else # mv $TEMPFILE lista.log # fi # if [ ! -s lista.log ]; then # rm lista.log # fi rm -f $TEMPFILE rm -f "/tmp/temporal$$"