elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Duda con Script Shell | eliminar espacios en blanco
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con Script Shell | eliminar espacios en blanco  (Leído 4,213 veces)
khrizs3422

Desconectado Desconectado

Mensajes: 5


Estoy empezando, soy Estudiante Autodidacta


Ver Perfil
Duda con Script Shell | eliminar espacios en blanco
« en: 30 Junio 2017, 16:01 pm »

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.mp3

MAL
youtube-dl -x --audio-format mp3 http://youtube.com/link -o nombre del tema.mp3

pero 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

Código
  1. function Descarga {
  2.   read -p 'INTRODUCE LINK DE YOUTUBE: ' fuente
  3.   read -p 'TITULO MP3 ( baile-del-peluche.mp3): ' nombre  #con este nombre se guarda el archivo
  4.  
  5.   }
  6.  
  7.  
  8. while true
  9. do
  10.  
  11.   Descarga
  12.  
  13.   youtube-dl -x --audio-format mp3 $fuente -o $nombre
  14. echo ""
  15. echo ""
  16. echo -e '\e[0;33m DESCARGA TERMINADA- INTRODUCE OTRO ZELDA O CIERRA LA VENTANA\e[0m';
  17. 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 Desconectado

Mensajes: 5


Estoy empezando, soy Estudiante Autodidacta


Ver Perfil
Re: Duda con Script Shell | eliminar espacios en blanco
« Respuesta #1 en: 2 Julio 2017, 04:39 am »

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 :


Código:
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 Desconectado

Mensajes: 9.788



Ver Perfil
Re: Duda con Script Shell | eliminar espacios en blanco
« Respuesta #2 en: 2 Julio 2017, 10:51 am »

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.mp3

MAL
youtube-dl -x --audio-format mp3 http://youtube.com/link -o nombre del tema.mp3

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:
Código:
"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í:
Código:
youtube-dl -x --audio-format mp3 $fuente -o '$nombre'
...o quizás así:
Código:
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 Desconectado

Mensajes: 5


Estoy empezando, soy Estudiante Autodidacta


Ver Perfil
Re: Duda con Script Shell | eliminar espacios en blanco
« Respuesta #3 en: 5 Julio 2017, 02:07 am »

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:
Código:
"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í:
Código:
youtube-dl -x --audio-format mp3 $fuente -o '$nombre'
...o quizás así:
Código:
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
Código:
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 Desconectado

Mensajes: 5


Estoy empezando, soy Estudiante Autodidacta


Ver Perfil
Re: Duda con Script Shell | eliminar espacios en blanco
« Respuesta #4 en: 5 Julio 2017, 02:13 am »

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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Detectar espacios en blanco.
Programación C/C++
javahat 5 19,316 Último mensaje 24 Mayo 2010, 16:59 pm
por javahat
mantener espacios en blanco
PHP
guillegf84 7 5,737 Último mensaje 14 Octubre 2010, 18:29 pm
por Shell Root
ignorar espacios en blanco
Programación C/C++
mapers 3 6,711 Último mensaje 8 Marzo 2011, 21:19 pm
por Akai
URL con variables con espacios en blanco en Python
Scripting
MA40 0 1,714 Último mensaje 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,445 Último mensaje 21 Noviembre 2012, 23:59 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines