Resolver el comando R no encontrado en Bash(o Cygwin)

Olorunfemi Akinlua 16 febrero 2024
  1. Resuelve el bash: '\r': comando no encontrado con Notepad++
  2. Resolver bash: '\r': comando no encontrado Con dos2unix
  3. Resolver bash: '\r': comando no encontrado con sed
Resolver el comando R no encontrado en Bash(o Cygwin)

Los comandos a veces pueden comportarse de manera diferente a lo que espera, incluso cuando aparentemente ha hecho todo bien, como es el caso de bash: '\r': comando no encontrado o mensajes de error similares como error de sintaxis cerca del token inesperado $'\r '.

Cuando vea tales mensajes de error, debe comprender el mensaje de error. En este caso, tiene que lidiar con el carácter de retorno de carro, \r, que le indica a la terminal que mueva el cursor al principio de la línea.

Este artículo lo ayudará a comprender el mensaje de error y cómo resolverlo o evitar que vuelva a suceder.

Resuelve el bash: '\r': comando no encontrado con Notepad++

Los diferentes sistemas operativos se comportan de manera diferente, y Windows suele ser el diferente. Como se dijo anteriormente, la presencia del carácter \r es la causa de este error.

El \r tiene que ver con los saltos de línea, que se administran de manera diferente en diferentes sistemas operativos.

A diferencia de Unix y las Mac modernas, Windows usa un estilo de nueva línea diferente que hace uso de \n (LF - Line Feed) y \r (CR - Carriage Return) como estilos de caracteres de nueva línea y Mac más antiguas (macOS antes de OS X ).

Unix, Linux y Mac modernos usan solo \n para comenzar una nueva línea, lo cual es importante cuando las terminales procesan texto.

Por lo tanto, si tiene una PC con Windows (probablemente ejecuta Cygwin, Git Bash o WSL2 - Subsistema de Windows para Linux), lo más probable es que el script que está intentando ejecutar contenga los caracteres CRLF (\r\n como caracteres de nueva línea) que podría haber visto en el editor de Bloc de notas predeterminado en Windows.

bloc de notas de windows

Con esto y la posibilidad de que haya creado la secuencia de comandos o el archivo en el que está ejecutando un comando con un editor basado en Windows, tiene finales de línea al estilo de Windows (o CRLF) y necesita deshacerse de los caracteres CRLF.

Una solución simple podría ser usar un editor como Notepad++ para cambiar el formato del archivo a formato de caracteres Unix LF para que no muestre el siguiente comando.

bash: '\r': command not found
syntax error near unexpected token `$'\r'
`fi

Abra el script con el que está trabajando utilizando Notepad++ en su sistema operativo (Windows o Mac) y cambie el formato de archivo establecido haciendo doble clic en la pestaña Windows (CR LF)/Macintosh (CR) y cambiando a Unix (LF).

libretapluspluss

Después de eso, ejecute el mismo comando en el script recién configurado y no debería tener ningún problema.

Recreemos los mismos problemas con un archivo de script simple que contenga lo siguiente.

#!/bin/bash

echo "Testing the Carriage Return Character"
echo "Behavior"
echo "Wow! It works"

El resultado esperado (sin errores):

Testing the Carriage Return Character
Behavior
Wow! It works

Guardamos el archivo de secuencia de comandos con las terminaciones de estilo de Windows predeterminadas, y el resultado de ejecutar el archivo de secuencia de comandos se muestra a continuación.

script.sh

Aunque todavía genera las declaraciones echo, nos da el comando '\r': no encontrado. Guardemos el mismo archivo con el formato Unix (LF).

guion unix

Ahora, el mensaje de error no existe.

Resolver bash: '\r': comando no encontrado Con dos2unix

Cuando esté dentro de la terminal (o Cygwin Terminal), probablemente no desee ir a un editor de texto para realizar algunos cambios en los finales de línea. Ahí es donde entra dos2unix con nuestro problema bash: '\r': comando no encontrado.

Con dos2unix, puede convertir sus archivos (de texto sin formato a scripts) en saltos de línea en formato DOS (Windows) o Mac a saltos de línea en formato UNIX.

Un simple comando dos2unix en nuestro script.sh resolverá nuestros mensajes de error.

dos2unix.exe script.sh

Es posible que obtenga un “comando no encontrado”, especialmente si está en Cygwin Terminal en Windows y no ha instalado el paquete.

Linux viene con la mayoría de las distribuciones típicas, pero si no lo tiene, puede usar el siguiente comando o siga la guía de instalación.

sudo apt install tofrodos

Para instalar dos2unix en macOS, puede instalar MacPorts y luego usar el comando a continuación o seguir la guía de instalación a través de Brew.

sudo port install dos2unix

Para instalar en Cygwin, debe hacer clic en archivo de instalación para actualizar su instalación existente. Después, debería ver la pantalla Seleccionar paquetes y una barra de búsqueda.

seleccionar paquetes

Con la barra de búsqueda, busque dos2unix y haga doble clic en el valor saltar (y debería ver un número de versión). Luego, haga clic en Siguiente y complete la instalación.

Ahora, probemos el comando dos2unix en el script.

dos2unix

Como puede ver, el comando cambia el archivo script.sh a formato Unix como lo indica la salida del comando, y cuando ejecutamos el mismo script, el mensaje de error ya no está allí.

dos2unix: converting file script.sh to Unix format...

Resolver bash: '\r': comando no encontrado con sed

sed es una utilidad de Unix que nos ayuda a analizar y transformar el texto disponible a través de terminales Linux, incluido Cygwin. Con él, podemos filtrar el carácter final \r sin que nuestro script cause problemas.

El siguiente comando puede ayudar a eliminar el carácter \r y eliminar el mensaje de error que estamos experimentando al usar algunas expresiones RegEx y la utilidad.

sed -i 's/\r$//' script.sh

En su caso, puede reemplazar el [script.sh] con el nombre del archivo.

Probemos el comando sed en nuestro script de estilo CRLF, script.sh.

sed

Ahora, estamos libres del $ '\r': comando no encontrado.

Con estas tres alternativas, puede evitar fácilmente el problema guardando sus archivos de script en formato Unix (LF) cuando esté trabajando. Sin embargo, si es algo que podemos prevenir y es simplemente un archivo al que tenemos acceso, podemos usar los comandos dos2unix o sed para solucionar el error.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - Bash Cygwin

Artículo relacionado - Bash Error