GNU/Linux >> Tutoriales Linux >  >> Linux

error de sintaxis cerca del token inesperado ' - bash

Gracias @jdt por tu respuesta.

Después de eso, y dado que sigo teniendo este problema con el retorno de carro, escribí ese pequeño guión. Solo ejecuta carriage_return y se le pedirá que "limpie" el archivo.

https://gist.github.com/kartonnade/44e9842ed15cf21a3700

alias carriage_return=remove_carriage_return
remove_carriage_return(){

# cygwin throws error like : 
# syntax error near unexpected token `$'{\r''
# due to carriage return
# this function runs the following
# cat originalfile | tr -d "\r" > newfile

read -p "File to clean ? "
file_to_clean=$REPLY
temp_file_to_clean=$file_to_clean'_'

# file to clean => temporary clean file
remove_carriage_return_one='cat '$file_to_clean' | tr -d "\r" > '
remove_carriage_return_one=$remove_carriage_return_one$temp_file_to_clean

# temporary clean file => new clean file
remove_carriage_return_two='cat '$temp_file_to_clean' | tr -d "\r" > '
remove_carriage_return_two=$remove_carriage_return_two$file_to_clean

eval $remove_carriage_return_one
eval $remove_carriage_return_two
# remove temporary clean file 
eval 'rm '$temp_file_to_clean


Podría ser un problema de codificación de archivos.

Me he encontrado con problemas de codificación de tipos de archivo al trabajar en archivos entre diferentes sistemas operativos y editores, en mi caso, particularmente entre los sistemas Linux y Windows.

Sugiero verificar la codificación de su archivo para asegurarse de que sea adecuado para el entorno Linux de destino. Supongo que un problema de codificación es menos probable dado que está usando una MAC que si hubiera usado un editor de texto de Windows, sin embargo, creo que aún vale la pena considerar la codificación de archivos.

--- EDITAR (Agregue una solución real según lo recomendado por @Potatoswatter)

Para demostrar cómo la codificación del tipo de archivo podría ser este problema, copié/pegué su script de ejemplo en el Bloc de notas de Windows (no tengo acceso a una Mac), luego lo copié en una máquina Linux y lo ejecuté:

[email protected]:~/windows> sh ./originalfile             
./originalfile: line 2: syntax error near unexpected token `$'{\r''
'/originalfile: line 2: `test() {

En este caso, el Bloc de notas guardó el archivo con retornos de carro y saltos de línea, lo que provocó el error que se muestra arriba. El \r indica un retorno de carro (los sistemas Linux terminan las líneas con saltos de línea \n solamente).

En la máquina Linux, puede probar esta teoría ejecutando lo siguiente para eliminar los retornos de carro del archivo, si están presentes:

cat originalfile | tr -d "\r" > newfile

Luego intente ejecutar el nuevo archivo sh ./newfile . Si esto funciona, el problema eran los retornos de carro como caracteres ocultos.

Nota: Esta no es una réplica exacta de su entorno (no tengo acceso a una Mac), sin embargo, me parece probable que el problema sea que un editor, en algún lugar, guardó retornos de carro en el archivo.

--- /EDITAR

Para elaborar un poco, los sistemas operativos y los editores pueden tener diferentes valores predeterminados de codificación de archivos. Por lo general, las aplicaciones y los editores influirán en la codificación del tipo de archivo utilizado, por ejemplo, creo que Microsoft Notepad y Notepad ++ tienen el valor predeterminado de Windows-1252. También puede haber diferencias de salto de línea a tener en cuenta (en entornos de Windows, a menudo se usa un retorno de carro y un salto de línea para terminar líneas en los archivos, mientras que en Linux y OSX, generalmente solo se usa un salto de línea).

Una pregunta y respuesta similar que hace referencia a la codificación de archivos está aquí:aparece un carácter incorrecto en la ejecución del script bash


prueba algo como

$ sudo apt-get install dos2unix
$ dos2unix offendingfile

Manera fácil de convertir example.sh archivo a UNIX si está trabajando en Windows es usar NotePad++ (Editar>Conversión EOL>Formato UNIX/OSX)

También puede establecer el EOL predeterminado en notepad++ (Configuración>Preferencias>Nuevo documento/Directorio predeterminado>seleccione Unix/OSX en el cuadro Formato)


Linux
  1. El Bash'?

  2. ¿Múltiples operadores lógicos, ((a || B) &&C), y "error de sintaxis cerca del token inesperado"?

  3. ¿Por qué el archivo de traducción de Bash no contiene todos los textos de error?

  4. Bash:¿Error de sintaxis cerca del token inesperado '}'?

  5. Error de alquitrán:EOF inesperado en el archivo

Cómo leer un archivo línea por línea en Bash

Comando de fuente Bash

Bash:Agregar al archivo

Sustitución de cadena en Bash

35 ejemplos de secuencias de comandos Bash

Script Bash (III)