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.