Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

258
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda