Historias
Slashboxes
Comentarios
 
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • por perceptronico (40832) el Martes, 17 Febrero de 2009, 16:28h (#1128360)
    ( Última bitácora: Martes, 12 Enero de 2010, 19:47h )
    Muchas gracias por tus recomendaciones. Voy a revisar de nuevo el script para ver si puedo arreglar los problemas que me comentas, iré poco a poco porque no creas que terminé de comprender lo que dijiste. De verdad muchas gracias.
    [ Padre ]
  • por pobrecito hablador el Martes, 17 Febrero de 2009, 18:41h (#1128390)
    De nada ;-)

    Me explico de nuevo :-) Bash, por defecto, separa campos en los caracteres espacio, tabulador y nueva línea. Así que si tienes un fichero, por ejemplo, "directorio/electric dreams.avi"... en una iteración del for, con $i obtienes "directorio/electric" y en la siguiente iteración, "dreams.avi". Una forma de solucionarlo es redefinir IFS para que el único separador de campos sea el caracter nueva línea. Está explicado en el enlace que puse y en la Advanced Bash-Scripting Guide.

    Lo segundo que te comentaba es el problema que ocurre cuando ejecutas el script con el argumento terminado con una barra: "./dir2html.sh directorio/" Cosa que ocurre siempre que en lugar de escribir el nombre completo, le des a TAB para completarlo. Un sed falla porque tratas de sustituir "a href='$1/", y en este caso te quedaría "a href='directorio//" y lógicamente no lo encuentra. Con el otro sed pasa lo mismo, buscas "a href='$1'", es decir "a href='directorio/'" y esa cadena no la encuentra porque find al imprimir los nombres de directorios no les añade la barra. El problema lo solucionas expandiendo el argumento de entrada así: ${1%/}, en lugar de haciendo simplemente $1, lo que elimina la barra del final en caso de que la haya. Es decir tendrías que poner: "a href='${1%/}/" y "a href='${1%/}'", respectivamente. Los distintos modos de expandir variables están explicados en el enlace que te puse a la Advanced Bash-Scripting Guide. Uno de ellos te permite eliminar el path de un nombre, por lo que te ahorrarías el sed que usas para ello. Te pongo un ejemplo:

    $ var=/path/de/prueba/fichero
    $ echo ${var##*/}
    fichero

    Saludos.
    [ Padre ]