Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 10 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Lun Mar 28, 2011 10:32 am
Mensajes: 4

Nota Publicado: Lun Mar 28, 2011 10:35 am 
Arriba  
Estoy intentando hacer algo muy simple pero como siempre me estoy liando mucho :D

Lo que quiero hacer es meter en una variable la lista de ficheros pdf de un directorio para después pasar esa lista de ficheros como parámetros a un programa.

Lo que hice fue:

unset todo;
for i in `ls *.pdf`;
do
todo=$todo" "\"$i\";
done

programa $todo;

Lo que hago es ir concatenando todos los nombres de ficheros e insertar comillas dobles al principio y al final de cada nombre. Esto lo hago por si hay algún fichero que tenga espacios en blanco o paréntesis en el nombre.

El resultado es que no funciona. La cadena se crea bien. Si se hace un echo $todo aparecen todos los nombre correctamente entrecomillados y separados por un espacio pero al pasárselo al programa, no los reconoce como nombre de ficheros.
Da la impresión de que el programa interpreta las " como si fuesen parte del nombre...

Alguna idea?


Última edición por Bodegas el Vie Abr 01, 2011 9:11 am, editado 1 vez en total
 Perfil  

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Sab Jun 07, 2008 7:00 am
Mensajes: 634
Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris

Nota Publicado: Lun Mar 28, 2011 2:42 pm 
Arriba  
No se por que necesitas concatenar yo haría simplemente:
programa $todo *.pdf

*.pdf se debería expandir por todos los archivos acabados por .pdf, así que no es necesario andar con ningún bucle

_________________
como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Jue Abr 12, 2007 7:00 am
Mensajes: 9186
Ubicación: tras la pantalla (...)

Nota Publicado: Lun Mar 28, 2011 4:58 pm 
Arriba  
si la cadena se crea bien, sera cuestion de pasarsela de otra manera al programa....

prueba con esto:

Código:
programa $(echo $todo) ;


:)

por cierto, ese unset del principio sobra. (quiero decir... esta de adorno. $todo NO va a estar definida. y si sospechas que puede estarlo, ponle un nombre que no deba estarlo. ). me refiero... la unica manera de que lo este, es que tengas una variable $todo en el bashrc o similares. por lo de que si has ejecutado previamente el script, no te preocupes. las variables son locales.

:)

PD: busca info sobre arrays (en bash). bash tiene muchisima potencia trabajando con arrays, y a lo mejor te simplifica un poco las cosas. (en realidad una variable de por si es un array, pero a la hora de trabajar, si utilizas la sintaxis de los arrays, puede que te resulte mas sencillo.) la pena es que no tengo ninguna guia a mano...
la idea es pasarle a tu programa algo asi:
Código:
programa ${todo[*]} ;

este es el primer link que he visto :P http://tldp.org/LDP/abs/html/arrays.html

_________________
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Lun Mar 28, 2011 10:32 am
Mensajes: 4

Nota Publicado: Mar Mar 29, 2011 1:28 pm 
Arriba  
Muchas gracias por las contestaciones.
Lo acabo de solucionar de la forma más fácil, con un simple *.pdf como dice dracel.
A veces me complico demasiado :D

niky45,
probé con esto programa $(echo $todos) ;
pero no funciona.
Gracias por el link de los arrays, le echaré un vistazo :)

Editado -- Mar Mar 29, 2011 5:28 am --

Pero ahora me surge otra duda.
¿Cómo puedo pasar un argumento que incluya comillas a un programa?
Porque está claro que escapando las comillas no funciona.

Por ejemplo, si quiero hacer un script que me busque un fichero:
En la linea de comandos haría un find / -xdev -name '*palabra*'

¿pero en un script?
find / -xdev -name '*$1*';

¿Cómo escapo las comillas simples para que me las reconozca como comillas?

 Perfil  

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Sab Jun 07, 2008 7:00 am
Mensajes: 634
Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris

Nota Publicado: Mar Mar 29, 2011 5:11 pm 
Arriba  
Creo que no comprendes como hace las expansiones bash
Ejecuta estos comandos y observa como se comporta
Código:
echo *
echo "*"

Viendo esto te darás cuenta de que bastara con que ejecutes
Código:
 find -xdev -name "$1"

Y para que lo coja bien al ejecutar el programa pongas como entrada "*palabra*"
Espero haberme explicado bien, ya que no me resulta fácil

_________________
como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Lun Mar 28, 2011 10:32 am
Mensajes: 4

Nota Publicado: Vie Abr 01, 2011 9:10 am 
Arriba  
No, si mi problema no está en los *. El problema está en los caracteres especiales y la necesidad de entrecomillar los nombres de archivos por si acaso.
Entiendo tu idea, pasar las comillas en el propio argumento. Así funciona, sí.
Pero sigo sin saber como pasar un argumento con comillas a un comando de linux.

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Jue Abr 12, 2007 7:00 am
Mensajes: 9186
Ubicación: tras la pantalla (...)

Nota Publicado: Vie Abr 01, 2011 12:30 pm 
Arriba  
asi??
programa '"mi argumento"'


auqnue se supone, que simplemente escapandolas deberia funcionar....

programa "\"mi argumento\""

_________________
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil WWW  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Lun Mar 28, 2011 10:32 am
Mensajes: 4

Nota Publicado: Lun Abr 04, 2011 9:49 pm 
Arriba  
No, así no funciona.
Pruébalo con un simple find.
find /home -name "\"algo\""

no te va a encontrar nada porque yo creo que interpreta las comillas como texto.

Y así tampoco
programa '"mi argumento"'

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Jue Abr 12, 2007 7:00 am
Mensajes: 9186
Ubicación: tras la pantalla (...)

Nota Publicado: Mar Abr 05, 2011 7:59 pm 
Arriba  
Citar:
[19:56:53] - [niky@ian:~]
>>> find /home -name "\"proc\""

[19:57:02] - [niky@ian:~]
>>> find /home -name "proc"

[19:57:07] - [niky@ian:~]
>>> lsg proc
Grepping for files matching proc...
proc_diskstats.log
proc_ps.log
proc_stat.log

[19:57:12] - [niky@ian:~]
>>>


no, con find no funciona. pero porque tampoco funciona si se lo paso con comillas sin mas...

el tema es... tu "problema" es que tienes un programa al que le quieres pasar un nombre de archivo con espacios, no???
Código:
[19:59:19] - [niky@ian:~]
>>> cp "proc_stat.log"  /tmp/ -v
`proc_stat.log' -> `/tmp/proc_stat.log'

[19:59:25] - [niky@ian:~]
>>> cp "\"proc_stat.log"\"  /tmp/ -v
cp: cannot stat `"proc_stat.log"': No such file or directory

[19:59:31] - [niky@ian:~]
>>> cp "\"proc_stat.log\""  /tmp/ -v
cp: cannot stat `"proc_stat.log"': No such file or directory

[19:59:54] - [niky@ian:~]
>>>



ciertamente, esta interpretando como que las comillas son parte del argumento. que por que?? ni idea. tal vez en el man de bash venga algo. deberias echarle un ojo. :?

_________________
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil WWW  

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Vie Abr 27, 2007 7:00 am
Mensajes: 1905

Nota Publicado: Mar Abr 05, 2011 9:50 pm 
Arriba  
Muy interesante, se me ocurre que podrías intentar usando listas:

Código:
argumentos=$( "archivo 1.pdf" "archivo 2.pdf" "archivo 3.pdf" )
programa ${argumentos[@]}

_________________
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net

 Perfil WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 10 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
Duda: Bash Script - Dos tareas en un paso, ya casi esta...

en Programación

Nagual

1

573

Mar Abr 06, 2010 11:36 pm

akodo Ver último mensaje

Ayuda con script en bash [Solucionado]

en Programación

ramonovski

5

1221

Jue Feb 16, 2012 7:35 am

ramonovski Ver último mensaje

Script bash - gnome-terminal (SOLUCIONADO)

en Programación

greer

4

1540

Lun Mar 17, 2014 4:54 am

greer Ver último mensaje

Problema con este script en bash [SOLUCIONADO]

en Programación

elmohino

10

1677

Vie Feb 18, 2011 1:13 am

niky45 Ver último mensaje

duda intruccion de bash(solucionado)

en Programación

skuad

3

702

Dom Ene 20, 2013 1:15 am

Snark1994 Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO