Resolver el comando R no encontrado en Bash(o Cygwin)
-
Resuelve el
bash: '\r': comando no encontrado
con Notepad++ -
Resolver
bash: '\r': comando no encontrado
Condos2unix
-
Resolver
bash: '\r': comando no encontrado
consed
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.
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)
.
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.
Aunque todavía genera las declaraciones echo
, nos da el comando '\r': no encontrado
. Guardemos el mismo archivo con el formato Unix (LF)
.
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.
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.
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
.
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 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