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
pgpNgIWUBBdZd.pgp
Description: PGP signature

