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.
--- /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)