Hola, peña!

Es un tema muy recurrente, pero por más vueltas que le doy no acabo de encontrar la solución. Tampoco en internet encontré el mismo tipo de caso que pretendo resolver.

En un script creo una variable que contiene una orden entre cuyos parámetros se encuentran nombres de archivo. Luego pretendo ejecutar la orden invocando a la variable. El problema está cuando los nombres de archivo contienen espacios.

Aquí van un ejemplo algo "estilizado" para que resulte más claro...

$ ARCHIVO="archivo con espacios"
$ echo $ARCHIVO
archivo con espacios
$ CMD="cat $ARCHIVO"
$ echo $CMD
cat archivo con espacios

Ya se intuye que esto fallará...

$ $CMD
cat: archivo: No existe el fichero o el directorio
cat: con: No existe el fichero o el directorio
cat: espacios: No existe el fichero o el directorio


¿Y si lo intento con comillas?

$ CMD="cat \"$ARCHIVO\""
$ echo $CMD
cat "archivo con espacios"
$ $CMD
cat: "archivo: No existe el fichero o el directorio
cat: con: No existe el fichero o el directorio
cat: espacios": No existe el fichero o el directorio


Ha fallado, aunque curiosamente sí que funciona desde el prompt
$ cat "archivo con espacios"
este es el contenido del archivo "archivo con espacios"


Probando a 'escapar' el espacio

$ CMD="cat $(echo ${ARCHIVO// /\\ })"
$ echo $CMD
cat archivo\ con\ espacios
$ $CMD
cat: archivo\: No existe el fichero o el directorio
cat: con\: No existe el fichero o el directorio
cat: espacios: No existe el fichero o el directorio


Este último también funciona directamente desde el indicador del sistema...

$ cat archivo\ con\ espacio
este es el contenido del archivo "archivo con espacios"




¿quizás cambiando el IFS? (no creo, pues sí que necesita procesar la separación entre la orden y el argumento)

$ IFS=":"
$ $CMD
cat archivo\ con\ espacios: orden no encontrada

Y hasta aquí he llegado. Creo que me resultará más fácil renombrar los archivos eliminando los espacios, pero me gustaría encontrar una solución más elegante. ¿Alguna sugerencia?

Muchas gracias.


--
Ismael Fanlo



--
_______________________________________________
Comandob mailing list
[email protected]
http://lists.badopi.org/mailman/listinfo/comandob

Responder a