Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

269
Vistas
El script Bash lee del archivo .csv para insertar objetos en mongo usando --eval, sigue obteniendo SyntaxError. No puedo entender por qué

Estoy trabajando en una tarea. Tenemos que insertar 1000 usuarios diferentes basados en hombres y mujeres. Empecé con los machos. La idea es usar el script para insertar los 442 registros de un archivo .csv. Aquí está el guión:

 #!/bin/bash while IFS=, read -r userName firstName lastName gender dob language bloodType zodiac constellation planet genre dino; do mongo USERNAME --eval 'db.USERNAME.insert({username:"'$userName'",first:"'$firstName'",last:"'$lastName'",gender:"'$gender'",dob:"'$dob'"})' done < males1.csv

No estoy insertando todos los campos porque estoy tratando de determinar el error. Cuando eliminé la parte dob del código, de repente funcionó. Se veía así:

 mongo X --eval 'db.USERNAME_male_a5.insert({username:"'$userName'",first:"'$firstName'",last:"'$lastName'",gender:"'$gender'"})'

Pude ingresar los 442 registros. Pero solo pude insertar el nombre de usuario, el apellido y el género. Necesito los otros campos allí también. Pero cuando agregué el dob, se me dio el siguiente error:

excepción no detectada: SyntaxError: "" literal no terminado antes del final del script: @(shell eval):1:96

Intenté cambiar las comillas, pero luego obtuve que el usuario X no está definido, lo que me confundió aún más.

Mi profesor nos dio esta sintaxis:

 mongo USERNAME_a5 --eval 'db.USERNAME_{GENDER}_a5.insert({username:"", first:"", last:"", gender:"", dob:"", language:"", blood_type:"", zodiac:"", constellations:"", planets:"", tv_genre:"", dino:""})'

Pero resultó ser difícil trabajar con esto, ya que me di cuenta de que necesitaba cambiar las comillas para que no inserte literalmente la palabra "$ nombre de usuario".

Gracias por tu tiempo.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Con todos esos caracteres entrecomillados, se puede pasar fácilmente por alto que la expansión del parámetro $dob no está entrecomillada, de modo que cuando dob es algo así como '1 de enero de 1990', el supuesto parámetro --eval se divide en los espacios en tres partes db.USERNAME.insert({username:"…",first:"…",last:"…",gender:"…",dob:"january fecha de nacimiento:" 1 enero y 1990"}) , lo que hace que el SyntaxError: "" literal not terminated . Puede corregir esto poniendo comillas dobles alrededor $dob (es decir …,dob:"'"$dob"'"})' ) y al menos todas las demás variables que pueden contener espacios.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda