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

Re: Parametros con espacios en blanco para un script



Hola
El 16/Jan/06 - 18:09, Iñaki dijo:
> El Lunes, 16 de Enero de 2006 17:22, Iñaki escribió:
> > Tengo un directorio con un espacio en blanco: "Lista Debian".
> >
> > Me gustaría saber cómo le puedo pasar ese directorio como parámetro a un
> > script de Bash para que opere con él. El problema de hecho es hacer que un
> > comando reconozca los espacios en blanco dentro de una variable.
> >
> > El script es este (es sólo para solucionar este problema):
> >
> > ---------------------------------------------
> > #!/bin/bash
> >
> > #### Así sale mal:
> > directorio="Lista\ Debian"
> > echo "Con la variable $directorio:"
> >   ls $directorio
> >
> > #### Así sale bien:
> > echo
> > echo "Directamente:"
> >   ls Lista\ Debian
> > ----------------------------------------------
> >
> > La salida de ese script es ésta:
> >
> > ----------------------------------------------
> >   #> ./script
> >
> >   Con la variable Lista\ Debian:
> >     ls: Lista\: No existe el fichero o el directorio
> >     ls: Debian: No existe el fichero o el directorio
> >
> >   Directamente:
> >     file1  file2  file3
> > ----------------------------------------------
> >
> >
> > He probado también poniendo:
> >   directorio="Lista\\ Debian"
> > y ocurre lo mismo.
> >
> >
> > El error está localizado: si una variable tiene \ para indicar un espacio
> > en un nombre de archivo entonces un comando que la emplee no lo hace
> > correctamente. ¿¿¿POR QUE???
> >
> >
> > Gracias por cualquier respuesta.
> 
> 
> 
> Hola, se me ha ocurrido una forma más fácil de que se vea el problema. 
> Olvidaros del script:
> 
> - Creamos un directorio con un espacio en medio:
>   mkdir Lista\ Debian
> 
> - Creamos archivos dentro:
>   touch Lista\ Debian/file1
>   touch Lista\ Debian/file2
> 
> - Ejecutamos esto y vemos que funciona:
>   ls Lista\ Debian
>       file1 file2   (funciona)
> 
> - Lo probamos con variable "directorio":
>   directorio="Lista Debian"
>   ls $directorio
>       ls: Lista: No existe el fichero o el directorio
>       ls: Debian: No existe el fichero o el directorio
> 
> - Probamos con otras combinaciones:
>   directorio=Lista Debian  
>   directorio=Lista\ Debian  
>   directorio=Lista\\ Debian  
>   directorio='Lista Debian'
>   directorio='Lista\ Debian'
> 
> Pero con ninguna funciona. ¿Alguna idea?

Prueba ls "$directorio"

Para estas cosas, puede que te venga bien activar el modo de depuración
de bash ejecutando set -x (set +x para desactivarlo). Así ves cómo te
está sustituyendo las comillas y qué es lo que te está haciendo
exactamente. De todas maneras, a mi esto de las comillas y lo espacios
me ha traido por el camino de la amargura mas de una vez. Alguna de
ellas he tenido que pasar argumentos con espacios de un script a otro he
tenido que claudicar y buscar otra forma de hacerlo :-S

> 
> PD: He probado todas las imaginables, si a alguien se le ocurre alguna forma 
> le pido por favor que antes lo compruebe siguiendo los pasos anteriores.
> 
> 
> Gracias a todos y un saludo.
> 
> 
> 
> -- 
> y hasta aquí puedo leer...
> 

-- 
___________________________________________________________________
Iván Forcada Atienza:
  correo: ivan@forcada.info
-------------------------------------------------------------------
"Software is like sex: it's better when it's free" (Linus Torvalds)
  

Attachment: pgpcz4LkXr5HE.pgp
Description: PGP signature


Reply to: