Saltar al contenido

EOF inesperado mientras busca coincidencias `”‘ – script bash

Esta pregunta se puede solucionar de diferentes formas, pero te enseñamos la que en nuestra opinión es la solución más completa.

Solución:

Puedes ver tu problema si solo miras tu pregunta. Tenga en cuenta cómo el resaltado de sintaxis se arruina después de la línea 95:

echo -e "Sorry, an error occurred. You have to run this on OS X""

Como te dice el mensaje de error, tienes un inigualable ". Solo quita el extra " de la línea de arriba y deberías estar bien:

echo -e "Sorry, an error occurred. You have to run this on OS X"

Este error puede ser difícil de rastrear en situaciones reales. Aquí proporciono una solución para situaciones del mundo real. Usaré mi script como ejemplo.

Actualicé mi script de shell. Al ejecutarlo me salio el siguiente mensaje de error:

/somepath/bin/myshellscript: line 1508: unexpected EOF while looking for matching `"'
/somepath/bin/myshellscript: line 1520: syntax error: unexpected end of file

line 1508 elif [ "$project" ]; then

Esta es la última línea que tiene un par de comillas dobles.

Normalmente, reviso mi script de shell cada vez que lo modifico. Esta vez, esperé un día y olvidé dónde había hecho una modificación. El problema ocurrió en cualquier lugar antes de esta línea (1508). El problema es que hasta yo comenté el esquema 1508

#elif [ "$project" ]; then

el verdugo del caparazón todavía dijo que la línea 1508 tiene problemas.

A continuación, hice una copia del script de shell original. Borrando un montón de código desde abajo. Luego valide mi código con el siguiente comando

bash -n mysbashscript

mybashscript: line 515: unexpected EOF while looking for matching `"'
mybashscript: line 561: syntax error: unexpected end of file

Ahora mi archivo es 1/3 del tamaño original. Inmediatamente vi el problema:

497 prepare_alignment() {
498     local projdir=$1:?"did not give project directory"
499     local samp=$2:?"did not give sample name"
500     local merged=$3:?"must give merged bam file name # here is the problem

Por alguna razón, el inigualable " en el interior no es capturado por el analizador de shell. Aquí es donde el analizador de shell se puede mejorar aún más.

El algoritmo más rápido para encontrar el problema es eliminar la mitad de su código desde abajo, si el error de sintaxis desaparece, entonces está en esta mitad. Si el error de sintaxis sigue ahí, el problema está en la mitad superior.

Si el problema en la segunda mitad, deshaga la eliminación. Repita este proceso. Puede reducir a un tamaño más pequeño para encontrar el origen del problema.

Al eliminar el código, debe eliminar una sección completa del código. Por ejemplo toda la función.

Puedes usar bash -n script_name o simplemente ejecute directamente el script. Ambos deberían funcionar. (aquí script_name es solo fooscript o barscript con fines ilustrativos, no es un nombre de script real y debe ser una palabra).

Si crees que ha resultado de utilidad este artículo, agradeceríamos que lo compartas con más programadores de este modo contrubuyes a extender nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *