Autor
|
Tema: Duda con Script Shell | eliminar espacios en blanco (Leído 4,576 veces)
|
khrizs3422
Desconectado
Mensajes: 5
Estoy empezando, soy Estudiante Autodidacta
|
Señores, intrusiando y aprendiendo a hacer script quice hacerme mas facil descargar Musica desde youtube y me hice este Script: es totalmente funcional para lo que yo quería, pero me surgió una duda y estoy quieriendo resolverla pero no he podido. read -p 'TITULO MP3 ( baile-del-peluche.mp3): ' nombre esta linea permite poner un nombre al tema descargado, con el que se guardará en la carpeta destino. youtube-dl -x --audio-format mp3 $fuente -o $nombre esta linea es lo que sale para que comience a correr el script y a descargar el tema importado desde el url de youtube. sin embargo para que funcione correctamente el $nombre no debe tener espacios es decir el codigo para ser corrible debe ser así: BIEN youtube-dl -x --audio-format mp3 http://youtube.com/link -o nombre_del_tema.mp3MAL youtube-dl -x --audio-format mp3 http://youtube.com/link -o nombre del tema.mp3pero ahora no se como hacerlo si en la linea read -p 'TITULO MP3 ( baile-del-peluche.mp3): ' nombre escribo con espacios por ejemplo nombre del tema.mp3 el script no corre y esa es mi duda. como hago que $nombre no tenga espacios aunque al escribir en el terminal lo haga con espacios. les dejo parte del codigo para que lo revicen y puedan ayudarme. saludos function Descarga { read -p 'INTRODUCE LINK DE YOUTUBE: ' fuente read -p 'TITULO MP3 ( baile-del-peluche.mp3): ' nombre #con este nombre se guarda el archivo } while true do Descarga youtube-dl -x --audio-format mp3 $fuente -o $nombre echo "" echo "" echo -e '\e[0;33m DESCARGA TERMINADA- INTRODUCE OTRO ZELDA O CIERRA LA VENTANA\e[0m'; done
Saludos
|
|
|
En línea
|
Estoy aprendiendo, no se molesten si hago demaciadas preguntas o consulto una y otra vez lo mismo. Quiero aprender bien.
|
|
|
khrizs3422
Desconectado
Mensajes: 5
Estoy empezando, soy Estudiante Autodidacta
|
al final lo solucioné solo por si alguien tuviera ese mismo dilema. Solo usé un poco de lógica. areglé que todos los temas descargados se guarden como youtube.mp3 al final agregue una linea que busque el fichero youtube.mp3 y lo reemplaze por lo escrito en $nombre. El código quedó de la siguiente forma : function Descarga { echo " " read -p 'INTRODUCE LINK DE YOUTUBE: ' fuente echo " " read -p 'Artista y titulo (EJ: Ricardo Arjona - Mojado): ' nombre echo " " }
while true do Descarga echo " " echo -e "\e[33m ######################################################### \e[0m " echo -e "\e[33m BUSCANDO LA CANCIÓN SELECCIONADA NO CIERRE LA VENTANA\e[0m " echo -e "\e[33m ########################################################## \e[0m " echo -e " " youtube-dl -x --audio-format mp3 $fuente -o youtube.mp3 echo "" echo -e "\e[31m Renombrando la pista por el nombre puesto por usted \e[0m" echo " " sleep 4 mv youtube.mp3 "$nombre.mp3" #esta linea reemplaza el fichero que descarga por defecto como youtube.mp3 por el nombre que pusimos anteriormente en $nombre aunque tenga espacios. echo -e "\e[0;33m DESCARGA TERMINADA- INTRODUCE OTRO ZELDA O CIERRA LA VENTANA. PIRATA DE *****\e[0m" done
|
|
|
En línea
|
Estoy aprendiendo, no se molesten si hago demaciadas preguntas o consulto una y otra vez lo mismo. Quiero aprender bien.
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
para que funcione correctamente el $nombre no debe tener espacios es decir el codigo para ser corrible debe ser así: BIEN youtube-dl -x --audio-format mp3 http://youtube.com/link -o nombre_del_tema.mp3MAL youtube-dl -x --audio-format mp3 http://youtube.com/link -o nombre del tema.mp3En realidad esos ejemplos de sintaxis no son "BIEN" y "MAL", sino "MAL" y "FATAL". Una de las cosas más básicas que se debe aprender en la programación, sobre todo al desarrollar y/o trabajar con aplicaciones command-line (o en el scripting en general), es que el caracter delimitador de argumentos es el espacio en blanco (" "), por ende, si escribes argumentos (en este caso, un nombre de archivo) con espacios en blanco, cada palabra será interpretado como parámetros adicionales... (lo que puede provocar un error de sintaxis) y para evitar eso los argumentos con espacios en blanco deben ser encerrados utilizando el símbolo de apertura y cierre de argumento, usualmente las comillas dobles. De hecho, todos los argumentos que le envies a una aplicación command-line deberías encerrarlos, contengan espacios en blanco o no, para seguir buenos hábitos de programación y prevenir un fallo humano. BIEN: "youtube-dl.exe" -x --audio-format "mp3" "http://youtube.com/link" -o "nombre de archivo con o sin espacios.mp3"
como hago que $nombre no tenga espacios aunque al escribir en el terminal lo haga con espacios.
Por las razones que he explicado arriba, tu pregunta está mal enfocada, ya que lo que realmente deberías hacer no es intentar evitar escribir espacios, sino justamente lo contrario... Hace muchos años que no uso Bash/Linux, no recuerdo como se hace esto, pero yo supongo que si le añades unas comillas simples se conseguirá el efecto deseado, y la variable se expandirá, así que prueba a ver si así te funciona así: youtube-dl -x --audio-format mp3 $fuente -o '$nombre' ...o quizás así: youtube-dl -x --audio-format mp3 $fuente -o "$nombre" ...y si no funciona, entonces tienes a Google para preguntarle como expandir una variable escrita dentro de comillas... o una solución similar. Saludos.
|
|
« Última modificación: 2 Julio 2017, 11:10 am por Eleкtro »
|
En línea
|
|
|
|
khrizs3422
Desconectado
Mensajes: 5
Estoy empezando, soy Estudiante Autodidacta
|
En realidad esos ejemplos de sintaxis no son "BIEN" y "MAL", sino "MAL" y "FATAL". Una de las cosas más básicas que se debe aprender en la programación, sobre todo al desarrollar y/o trabajar con aplicaciones command-line (o en el scripting en general), es que el caracter delimitador de argumentos es el espacio en blanco (" "), por ende, si escribes argumentos (en este caso, un nombre de archivo) con espacios en blanco, cada palabra será interpretado como parámetros adicionales... (lo que puede provocar un error de sintaxis) y para evitar eso los argumentos con espacios en blanco deben ser encerrados utilizando el símbolo de apertura y cierre de argumento, usualmente las comillas dobles. De hecho, todos los argumentos que le envies a una aplicación command-line deberías encerrarlos, contengan espacios en blanco o no, para seguir buenos hábitos de programación y prevenir un fallo humano. BIEN: "youtube-dl.exe" -x --audio-format "mp3" "http://youtube.com/link" -o "nombre de archivo con o sin espacios.mp3"
Por las razones que he explicado arriba, tu pregunta está mal enfocada, ya que lo que realmente deberías hacer no es intentar evitar escribir espacios, sino justamente lo contrario... Hace muchos años que no uso Bash/Linux, no recuerdo como se hace esto, pero yo supongo que si le añades unas comillas simples se conseguirá el efecto deseado, y la variable se expandirá, así que prueba a ver si así te funciona así: youtube-dl -x --audio-format mp3 $fuente -o '$nombre' ...o quizás así: youtube-dl -x --audio-format mp3 $fuente -o "$nombre" ...y si no funciona, entonces tienes a Google para preguntarle como expandir una variable escrita dentro de comillas... o una solución similar. Saludos. Agradezco la aclaración y la respuesta, por desgracia youtube-dl no permite la incorporacion de " " fue lo primero que intenté ( poner la linea como la planteas) Por otra parte de aber encontrado la respuesta en Google no abría preguntado en un foro, de ser por eso cerremos los foros y no preguntemos nada ya que siempre te dicen que busques en google . Al final de todo tuve que proporcionar otra solución. te dejo el codigo final que use para que lo revisen y hechen mano si a alguien le sirve echo -e "\e[35m NOTA 1 : NO PONER VIDEOS DIRECTO DE UNA LISTA DE REPRODUCCIÓN \e[0m" echo " " echo -e "\e[33m NOTA 2 : RECUERDA PONER EL NOMBRE DEL ARTISTA Y TEMA \e[0m" echo " " echo -e "\e[35mANTES DEBES CREAR LA CARPETA DONDE DESCARGARÁ LA MUSICA\e[0m" read -p 'Introduce el nombre de la Carpeta a crear: ' carpeta echo " " mkdir "$carpeta" cd "$carpeta" sleep 3
function Descarga { echo " " read -p 'INTRODUCE LINK DE YOUTUBE: ' fuente echo " " echo -e "\e[0;33mPONE EL NOMBRE DEL AUTOR Y EL TEMA (EJEMPLO : Mägo de oz - El lago)\e[0m" echo " " read -p 'NOMBRE Y TITULO: ' nombre echo " " }
while true do Descarga echo " " echo -e "\e[33m ########################################################## \e[0m " echo -e "\e[33m # BUSCANDO LA CANCIÓN SELECCIONADA NO CIERRE LA VENTANA #\e[0m " echo -e "\e[33m ########################################################## \e[0m " echo -e " " youtube-dl -x --audio-format mp3 $fuente -o youtube.mp3 echo "" echo -e "\e[31mRenombrando la pista por el nombre puesto por usted\e[0m" echo " " sleep 4 mv youtube.mp3 "$nombre.mp3" echo -e "\e[0;33mDESCARGA TERMINADA- INTRODUCE OTRO ZELDA O CIERRA LA VENTANA. PIRATA DE *****\e[0m" done
|
|
« Última modificación: 5 Julio 2017, 02:12 am por khrizs3422 »
|
En línea
|
Estoy aprendiendo, no se molesten si hago demaciadas preguntas o consulto una y otra vez lo mismo. Quiero aprender bien.
|
|
|
khrizs3422
Desconectado
Mensajes: 5
Estoy empezando, soy Estudiante Autodidacta
|
PD este codigo fue el que dejé final y funciona a la perfección para descargar MP3 desde youtube y otras web de videos
|
|
|
En línea
|
Estoy aprendiendo, no se molesten si hago demaciadas preguntas o consulto una y otra vez lo mismo. Quiero aprender bien.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Detectar espacios en blanco.
Programación C/C++
|
javahat
|
5
|
19,769
|
24 Mayo 2010, 16:59 pm
por javahat
|
|
|
mantener espacios en blanco
PHP
|
guillegf84
|
7
|
6,071
|
14 Octubre 2010, 18:29 pm
por Shell Root
|
|
|
ignorar espacios en blanco
Programación C/C++
|
mapers
|
3
|
6,989
|
8 Marzo 2011, 21:19 pm
por Akai
|
|
|
URL con variables con espacios en blanco en Python
Scripting
|
MA40
|
0
|
1,955
|
19 Julio 2012, 12:35 pm
por MA40
|
|
|
Dud sobre un script ¿como se hace? y duda variable con espacios BATCH
Scripting
|
r7pyrred
|
3
|
3,971
|
21 Noviembre 2012, 23:59 pm
por Eleкtro
|
|