[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Script mejorado para buscar en DRAE (era Re: RMS España, España y España)



On Thu, Jul 10, 2003 at 01:45:41PM +0200, Marcelo E. Magallon wrote:
> On Thu, Jul 10, 2003 at 12:45:41PM +0200, Javier Fernández-Sanguino Peña wrote:
> 
>  > justo después del bucle que define el valor que tendrá.. ¿O te
>  > refieres a otra cosa?
> 
>  A eso me refiero, sí.  La solución que propones no es atómica tampoco.
> 
>     [ -e /tmp/archivo ] || > /tmp/archivo

Sí, ya se que no es atomática, pero mejora respecto al anterior. Además ten
en cuenta que sólo es necesario cuando tempfile no está presente (ya que lo 
crea) o sea, en el caso de utilizar drae.$$... Mira tempfile(1)
Con lo que tendrías, una creación _segura_ si tienes tempfile instalado 
(que está en debianutils que es 'Essential' en Debian) y  una creación no 
tan segura (pero con un margen de condición de carrera muy ajustado) en 
otros S.O.


>  > PS: Tampoco es que sea muy recomendable utilizar una zona común
>  > (/tmp) para crear ficheros temporales
> 
>  De hecho ese es el problema.  Dado que esto es un archivo temporal de
>  un usuario, se debería crear el archivo en un directorio al cual solo
>  el usuario tenga acceso de escritura en situaciones normales (por
>  ejemplo $HOME).

Totalmente de acuerdo. Pero habría que considerar que a veces el $HOME no 
está definido ¿Qué tal (para rizar el rizo) el que adjunto? :-)

Javi
#!/bin/bash
# Programa para acceder al diccionario de la RAE
# (c) 2003 Javier Fernandez-Sanguino Peña
# Distribuido bajo los términos de la licencia GNU GPL
# ver http://www.gnu.org

error () {
# Salir con error
	echo "ERROR: $1"
	exit 1
}

setup () {
# Definir el entorno inicial

[ -z "$PAGER" ] && PAGER=more

DIR="$HOME"
# Si no hay $HOME lamentablemente tenemos que utilizar otro
# directorio... aunque aquí se podría abortar
[ -z "$DIR" ] && DIR="/tmp/"
[ ! -d "$DIR" ] && error "No existe el directorio $DIR para almacenamiento temporal"

# Determine how to set the tempfile
if [ -n "`which tempfile`" ]; then
	draetmp=`tempfile -d $DIR --prefix=.`
	[ -e "$draetmp" ] || error "Tempfile no ha podido crear el fichero temporal $draetmp!"
else
	draetmp=$DIR/drae.$$
	if [ ! -e "$draetmp" ] ; then
		>$draetmp
	else
		error "Alguien ha creado ya el fichero temporal $draetmp!"
	fi
fi
trap "rm -rf $draetmp" 1 2 3 9 15

if [ -n "`which lynx`" ]; then
	DOWNLOAD="lynx --dump --nolist";
elif [ -n "`which links`" ]; then
	DOWNLOAD="links -dump";
elif [ -n "`which w3ma`" ]; then
	DOWNLOAD="w3m -dump -T text/html -s";
else
	error "No se encuentra un programa que pueda ser utilizado para acceder al diccionario";
fi

}

# Inicio del programa

# TODO si se busca más de una iterar por ellas
[ -z "$1" ] && error "Modo de uso: $0 palabra"
setup

$DOWNLOAD "http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&LEMA=$1"; > $draetmp
[ $? -ne 0 ] && error "Error al acceder a buscon.rae.es"


if [ -f "$draetmp" ] 
then
	cat $draetmp 2> /dev/null | tail -n $((`wc -l $draetmp 2> /dev/null | awk '{ print $1 ;}'`-2)) | $PAGER
	echo
	rm $draetmp
else
	error "Error al acceder al fichero temporal $draetmp (no creado)"
fi

exit 0

Attachment: pgpnw_fYKwQSa.pgp
Description: PGP signature


Reply to: