Perdóname por esto, es un script muy simple en Bash. Aquí está el código:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
después de ejecutar sh file.sh:
error de sintaxis: final inesperado del archivo
Otra cosa para verificar (se me acaba de ocurrir):
Es decir, este fragmento de aspecto inocente provocará el mismo error:
Para hacer feliz al analizador tonto:
fuente
;
que se espera que la instrucción Every termine con,;
por lo que al final, por ejemplo:if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash fi
producirá ese error, mientrasif [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash; fi;
que no ... notará los pequeños puntos y coma al final, es decir, después de.bash
yfi
.zsh
usuario. El primero funciona enzsh
pero no ensh
nibash
. Ojalá fuera 4 personas para poder dar estos 4 votos a favorTambién acabo de recibir este mensaje de error al usar la sintaxis incorrecta en una
if
cláusulaelse if
(error de sintaxis: final inesperado del archivo)elif
(sintaxis correcta)lo depuré comentando bits hasta que funcionó
fuente
una cláusula if => fi no cerrada también aumentará esto
consejo: use trap para depurar, si su script es enorme ...
p.ej
fuente
unexpected end of file
error se producirá tan pronto comofi
se golpee.Obtuve esta respuesta de este problema similar en StackOverflow
Abra el archivo en Vim e intente
:set fileformat=unix
Gracias @lemongrassnginger
fuente
dos2unix
que aconseja la respuesta aceptada.en cygwin necesitaba: -
en .bash_profile. De esta manera no necesitaba ejecutar unix2dos
fuente
Así que encontré esta publicación y las respuestas no me ayudaron, pero pude averiguar por qué me dio el error. Tuve un
El problema fue que copié el código anterior para que estuviera en una función y, sin darme cuenta, puse el código en una pestaña. Necesito asegurarse de que el último EOF no esté marcado con pestañas.
fuente
EOF
sangrado cuatro espacios y bash no lo analizó por eso. Eliminar espacios solucionó el problema.Tuve el problema cuando escribí la declaración "if - fi" en una línea:
Escribir multilínea resolvió mi problema:
fuente
Esto me estaba sucediendo cuando intentaba llamar a una función usando parens, por ejemplo
debiera ser:
fuente
PARA VENTANAS:
En mi caso, estaba trabajando en el sistema operativo Windows y recibí el mismo error mientras ejecutaba autoconf.
Luego convertí el archivo con conversión EOL a Windows (CR LF) de la siguiente manera:
EDITAR -> CONVERSIÓN EOL -> WINDOWS (CR LF)
fuente
Pude cortar y pegar su código en un archivo y se ejecutó correctamente. Si lo ejecuta así, debería funcionar:
Su "file.sh":
El comando:
Tenga en cuenta que "file.sh" debe ser ejecutable:
Es posible que obtenga ese error b / c de cómo está haciendo la entrada (con una tubería, zanahoria, etc.). También puede intentar dividir la condición en dos:
O, ya que está usando
bash
, puede usar la sintaxis incorporada:Y, finalmente, por supuesto, puede verificar si se dieron 3 argumentos (limpio, mantiene la compatibilidad con el shell POSIX):
fuente
Acabo de cortar y pegar su ejemplo en un archivo; funcionó bien bajo bash. No veo ningún problema con eso.
En buena medida, es posible que desee asegurarse de que termine con una nueva línea, aunque a bash no debería importarle. (Se ejecuta para mí con y sin la nueva línea final).
A veces, verá errores extraños si ha incrustado accidentalmente un carácter de control en el archivo. Dado que es un script corto, intente crear un nuevo script pegándolo de su pregunta aquí en StackOverflow, o simplemente volviendo a escribirlo.
¿Qué versión de bash estás usando? (
bash --version
)¡Buena suerte!
fuente
Asegúrese de que el nombre del directorio en el que está presente el archivo .sh no tenga un carácter de espacio. Por ejemplo: digamos que si está en una carpeta llamada 'Nueva carpeta', seguramente encontrará el error que ha citado. En su lugar, simplemente nómbrelo como 'New_Folder'. Espero que esto ayude.
fuente
Aparentemente, algunas versiones del shell también pueden emitir este mensaje cuando la última línea de su script carece de una nueva línea.
fuente
En Ubuntu:
A continuación,
File -> Save as
y establecerend line
aUnix/Linux
fuente
Sé que llegué tarde a la fiesta. Espero que esto pueda ayudar a alguien.
Verifique su archivo .bashrc. Quizás cambiarle el nombre o moverlo.
Discusión aquí: no se puede obtener un script bash simple
fuente
Para personas que usan MacOS:
Si recibió un archivo con formato de Windows y deseaba ejecutarlo en MacOS y ve este error, ejecute estos comandos.
fuente
La falta de una llave de cierre en la definición de una función causará este error como acabo de descubrir.
Que por supuesto debería ser así ...
fuente
En mi caso, hay un redundante
\
de la siguiente manera:Hay NO una
\
al final deDATA.PATH_PREFIX ./afs/kinetics400
fuente