Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

255
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!