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

Re: Bash y espacios en los nombres de fichero



El Vie 26 Jul 2002 22:41, Diego Sevilla Ruiz comentó:
> On Fri, Jul 26, 2002 at 10:16:53PM +0200, Amaya wrote:
> | Diego Sevilla Ruiz dijo:
> | > 	Casi lo más seguro es que tu variable $2 no está bien
> | > 	construida. Así que yo de tí miraría en el paso anterior donde
> | > 	se genera el valor de sa variable.
> |
> | Exacto, eso es. La linea:
> |
> | set x $line
> |
> | $line es la que, por lo que yo entiendo, que puedo estar muy
> | equivocada, contiene todos los nombres de archivo, y los separa por
> | espacios, no se entiendo esto demasiado alla.
>
> Amos a ver, prueba a poner set x "$line". De todas maneras, esto no
> te va a funcionar (creo) por cómo vas construyendo la variable $line
> más arriba, porque haces algo como:
>
> line="$line $fichero"
>
> ¿Qué pasa si "$fichero" tiene un espacio? ¿Cómo sabes qué espacios
> están dentro de un fichero o separan a los ficheros? Creo que el que
> hizo ese script lo hizo demasiado rápido, y no pensó en esta
> característica. Para hacer que un programa acepte ficheros con
> espacios, hay que basarse en las características del shell que
> permiten esto, por ejemplo
>
> for i in *; do echo ":$i:" ; done
>
> funciona aunque haya ficheros con espacios, porque el shell separa
> cada fichero en un argumento de $i, pero por ejemplo, esto puede no
> funcionar:
>
> k=`find .` && for i in "$k" ; do echo ":$i:" ; done
>
> te imprimirá los dos puntos entre cada _palabra_, no entre cada
> _fichero_.

¿No ha mencionado nadie lo de modificar la variable IFS?

Antes de usar remachadoras neumáticas (perl, python) para clavar un 
simple clavo ;) probad por ejemplo algo así:
  line="$line:$fichero"
  ...
  IFS=':'; set x $line; unset IFS

(suelo ponerlo en una línea para no separarlo inadvertidamente)
sustituye ':' por cualquier carácter que no sea usado en los nombres de 
fichero (y que no sea interpretado de manera especial por el shell). Es 
la manera más rápida de arreglar el script sin tocar absolutamente nada 
más, salvo aquellas partes que manejen $line.

También lo he usado alguna vez en los bucles for, pero hay que tener 
más cuidado con lo que metes en el bucle.

PD: por cierto ¿que pasó con el "fatal signal 11" del cc? ¿era la 
memoria?

-- 
z92 Yz9 Wb3 Bi P0 FGag MXa KM2 Yg M2 YFBSPK02 L
}-)


-- 
To UNSUBSCRIBE, email to debian-user-spanish-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org



Reply to: