Error de sintaxis cerca de un token inesperado en Bash
Este artículo demuestra cómo identificar y corregir los errores de sintaxis de token inesperados causados por los caracteres invisibles en los scripts de Bash.
Error de sintaxis cerca de un token inesperado en Bash
A veces, un script de Bash que sintácticamente se ve perfectamente bien no funciona. Obtiene un vago error de sintaxis
que tampoco ayuda.
Digamos que tienes un código como:
#!/bin/bash
while :
do
echo "This will repeat every second until you press CTRL + C"
sleep 1
done
Sintácticamente, el código anterior es correcto. Sin embargo, algunos caracteres invisibles pueden hacer que el código sea sintácticamente ilegible en Linux.
¿Cómo podemos confirmar si los personajes invisibles están causando el problema o no? ¿Cómo solucionamos eso?
La solución es simple, como se discutió en las secciones anteriores.
Identificar el problema
Suponga que filename.sh
es el archivo que ha guardado para el script Bash.
Abra su terminal y navegue hasta la ubicación del archivo. Luego, ejecute el siguiente comando en la terminal.
cat -v filename.sh
Los caracteres invisibles, que probablemente representen un retorno de carro o un espacio sin interrupción, deben aparecer como ^M
, M-BM-
o M-
. Si otros personajes extraños ingresan a su archivo, también debería poder verlos.
Tenemos un par de opciones para solucionar nuestro problema en nuestro caso.
Quitar saltos de línea de Windows usando los comandos de la consola
Si tiene un archivo problemático con el nombre filename.sh
, podemos usar el siguiente comando para guardar el contenido corregido en un archivo llamado fixedFile.sh
.
tr -d '\r' < filename.sh > correctedFile.sh
Convierta automáticamente un archivo que no sea UNIX en un formato compatible con UNIX
Para ello necesitarás una utilidad llamada dos2unix
. Si está utilizando apt
como administrador de paquetes, puede usar el siguiente comando para instalar dos2unix
:
sudo apt install dos2unix
O, si está utilizando una distribución basada en arquitectura, puede instalar dos2unix
desde AUR.
Para convertir el archivo a un formato compatible con UNIX, abra su terminal y navegue hasta la carpeta que contiene el archivo deseado. Consideraremos un archivo llamado filename.sh
.
Ingrese el siguiente comando en su terminal.
dos2unix filename.sh
El comando anterior convertirá su archivo a un formato compatible con UNIX. Por lo tanto, resolviendo el problema.
Con suerte, su script Bash funciona bien ahora. Si aún no se está ejecutando, lo más probable es que tenga problemas reales de sintaxis.
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn