{"id":578474,"date":"2023-04-17T20:07:18","date_gmt":"2023-04-17T20:07:18","guid":{"rendered":"https:\/\/magazineoffice.com\/solucion-error-mal-interprete-no-existe-tal-archivo-o-directorio-en-linux\/"},"modified":"2023-04-17T20:07:25","modified_gmt":"2023-04-17T20:07:25","slug":"solucion-error-mal-interprete-no-existe-tal-archivo-o-directorio-en-linux","status":"publish","type":"post","link":"https:\/\/magazineoffice.com\/solucion-error-mal-interprete-no-existe-tal-archivo-o-directorio-en-linux\/","title":{"rendered":"Soluci\u00f3n: error \u00abMal int\u00e9rprete: no existe tal archivo o directorio\u00bb en Linux"},"content":{"rendered":"


\n<\/p>\n

\n
Hannah Stryker \/ Geek de instrucciones<\/span><\/figcaption><\/figure>\n
Si obtiene un error de \u00abint\u00e9rprete incorrecto: no existe tal archivo o directorio\u00bb al ejecutar un script de shell, debe convertir su archivo de script de Windows a finales de l\u00ednea de Unix. Un m\u00e9todo es utilizar el dos2unix<\/code> comando, as\u00ed:<\/p>\n

dos2unix script1.sh<\/p>\n<\/div>\n

\u00bfIntent\u00f3 ejecutar un script de Bash y recibi\u00f3 el mensaje de error \u00ab\/bin\/bash^M: mal int\u00e9rprete: no existe tal archivo o directorio\u00bb? El resultado no es muy \u00fatil y casi da la impresi\u00f3n de que falta el script. Afortunadamente, ese no es el caso, y la soluci\u00f3n es muy simple.<\/p>\n

\u00bfQu\u00e9 es el error \u00abMal int\u00e9rprete: no existe tal archivo o directorio\u00bb?<\/h2>\n

Obteniendo un mensaje de error que dice \/bin\/bash^M: bad interpreter: No such file or directory<\/code> simplemente significa que su archivo de script de shell tiene finales de l\u00ednea incorrectos: los caracteres colocados al final de una l\u00ednea indican que es hora de pasar a la siguiente l\u00ednea. A Windows descendiente de DOS le gusta ver un terminador de \u00abretorno de carro y avance de l\u00ednea\u00bb (CRLF), anotado rn<\/code>. Por el contrario, Linux, macOS moderno y otros sistemas basados \u200b\u200ben Unix usan solo \u00abavance de l\u00ednea\u00bb (LF) o n<\/code>.<\/p>\n

Si ve este error de interpretaci\u00f3n incorrecto, lo m\u00e1s probable es que usted o la persona de la que obtuvo el script lo escribieron originalmente en una computadora con Windows. Bash ve esos rn<\/code> finales de l\u00ednea establecidos por la computadora con Windows y se molesta porque impiden que el shell interprete correctamente su script.<\/p>\n

\"A<\/p>\n

Incluso puede confirmar el problema en una terminal de Linux se\u00f1alando el file<\/code> comando a su script.<\/p>\n

file script1.sh<\/pre>\n

\"Verifique<\/p>\n

Si el archivo usa finales de l\u00ednea DOS, ver\u00e1 el mensaje \u00abcon terminadores de l\u00ednea CRLF\u00bb adjunto en la salida. Si nuestra secuencia de comandos hubiera estado usando las nuevas l\u00edneas de Unix (LF) adecuadas, no mencionar\u00eda terminadores en absoluto. Afortunadamente, volver al negocio de LF es f\u00e1cil.<\/p>\n

C\u00f3mo corregir un error de \u00abMal int\u00e9rprete: no existe tal archivo o directorio\u00bb<\/h2>\n

Todo lo que se necesita para deshacerse de ese mensaje de error y comenzar a ejecutar sus scripts normalmente es cambiar de los finales de l\u00ednea de DOS a los finales de l\u00ednea de Unix. Puede hacer esto con comandos de terminal o en su editor de c\u00f3digo favorito. Aqu\u00ed hay ocho formas de solucionarlo:<\/p>\n

Uso del comando dos2unix<\/h3>\n

Hay un programa de l\u00ednea de comandos hecho solo para convertir archivos de DOS (tambi\u00e9n conocido como Windows) en archivos totalmente compatibles con Unix llamados acertadamente dos2unix<\/code>. Est\u00e1 disponible en la mayor\u00eda de los repositorios predeterminados, por lo que puede instalarlo en Ubuntu con:<\/p>\n

sudo apt install dos2unix<\/pre>\n

En nuestra instalaci\u00f3n de Fedora dos2unix<\/code> vino preinstalado, pero puede confirmar que lo tiene con:<\/p>\n

sudo dnf install dos2unix<\/pre>\n

En Arch Linux:<\/p>\n

sudo pacman -S dos2unix<\/pre>\n

Usando dos2unix<\/code> es simple; solo dale tu nombre de archivo.<\/p>\n

dos2unix script1.sh<\/pre>\n

\"Introduzca<\/p>\n

Compru\u00e9balo con file<\/code> si desea confirmar que la conversi\u00f3n fue exitosa antes de ejecutar su secuencia de comandos. Tambi\u00e9n puede convertir en masa nombrando varios archivos separados solo por un espacio.<\/p>\n

dos2unix script1.sh script2.sh script3.sh<\/pre>\n

O, si tiene un nombre de archivo consistente, por supuesto puede escribir comandos m\u00e1s cortos usando comodines.<\/p>\n

dos2unix script*.sh<\/pre>\n

\"Use<\/p>\n

El dos2unix<\/code> El comando tiene varios indicadores para ayudarlo a realizar tipos especiales de conversiones, como cambiar la propiedad del archivo. Incluso puedes usarlo en forma inversa, unix2dos<\/code>, si desea volver a CRLF. Ingresar dos2unix --help<\/code> aprender m\u00e1s.<\/p>\n

Usando el comando tr<\/h3>\n

Si no puede o no quiere instalar una utilidad dedicada, Linux tiene herramientas integradas que limpiar\u00e1n esas nuevas l\u00edneas. Con el tr<\/code> comando, puede quitar el r<\/code> parte de los finales de l\u00ednea por lo que nos queda n<\/code> terminadores.<\/p>\n

tr -d 'r' < script1.sh > script1_unix.sh<\/pre>\n

Aqu\u00ed, tr<\/code> est\u00e1 tomando el texto de la script1.sh<\/code> archivo, eliminando cada instancia de r<\/code> encuentra, y guarda la salida como el archivo script1_unix.sh<\/code>.<\/p>\n

Usando el comando sed<\/h3>\n

El poderoso sed<\/code> El comando integrado en su shell tambi\u00e9n puede cambiar los finales de l\u00ednea de su archivo.<\/p>\n

sed -i 's\/r\/\/' script1.sh<\/pre>\n

Si no est\u00e1 familiarizado con sed<\/code> sintaxis, estamos diciendo sed<\/code> para editar nuestro archivo (-i<\/code>) y sustituir (s\/<\/code>) cada retorno de carro (r<\/code>) sin nada. Eso nos deja con el preferido de Unix. n<\/code> terminadores de l\u00ednea.<\/p>\n

Usando vi o vim<\/h3>\n

Si usa vi o vim para editar sus scripts, simplemente pase este comando para convertir el archivo actualmente abierto a finales de l\u00ednea Unix.<\/p>\n

:set fileformat=unix<\/pre>\n

\"Cambie<\/p>\n

RELACIONADO:<\/strong> C\u00f3mo salir del editor Vi o Vim<\/em><\/strong><\/p>\n

Usando Geany<\/h3>\n

Si est\u00e1 trabajando en un entorno de escritorio, no hay raz\u00f3n para perder el tiempo en la terminal solo para preparar sus archivos para el mundo de Unix. Pr\u00e1cticamente todos los editores de c\u00f3digo e IDE tienen un conmutador para los finales de l\u00ednea. Eso incluye a Geany.<\/p>\n

Para convertir finales de l\u00ednea en Geany, vaya a Documento > Establecer finales de l\u00ednea > Convertir y establecer en LF (Unix).<\/p>\n

\"En<\/p>\n

Guarde su script e intente ejecutarlo de nuevo.<\/p>\n

Usando Kate o Kwrite<\/h3>\n

Si usa Kwrite para editar su secuencia de comandos, o Kate, la prima m\u00e1s poderosa de Kwrite, puede convertir al formato LF haciendo clic en Herramientas > Fin de l\u00ednea > Unix.<\/p>\n

\"En<\/p>\n

Guarde el archivo y ejecute su script nuevamente.<\/p>\n

Usando el Bloc de notas++<\/h3>\n

Si edita el c\u00f3digo en Notepad ++, tambi\u00e9n puede convertir f\u00e1cilmente los finales de l\u00ednea, lo cual es \u00fatil porque probablemente lo est\u00e9 ejecutando en Windows (a menos que haya instalado Notepad ++ para Linux) y puede convertirlos antes de pasar a su sistema Linux. Con el archivo abierto, vaya a Edici\u00f3n > Conversi\u00f3n EOL > Unix (LF).<\/p>\n

\"\"<\/p>\n

Aseg\u00farese de guardar su script antes de ejecutarlo.<\/p>\n

Si desea que Notepad ++ cree archivos con finales de l\u00ednea Unix de forma predeterminada, vaya a Configuraci\u00f3n> Preferencias, seleccione la pesta\u00f1a \u00abNuevo documento\u00bb y, en las opciones \u00abFormato (final de l\u00ednea)\u00bb, haga clic en el bot\u00f3n de opci\u00f3n \u00abUnix (LF)\u00bb.<\/p>\n

\"\"<\/p>\n

Usando el c\u00f3digo VS<\/h3>\n

Visual Studio Code (VS Code) funciona de la misma manera, solo que la palanca es a\u00fan m\u00e1s f\u00e1cil de encontrar. Simplemente haga clic en \u00abCRLF\u00bb en la esquina inferior derecha de la ventana de VS Code.<\/p>\n

\"\"<\/p>\n

Tambi\u00e9n puede configurar VS Code para usar finales de l\u00ednea de Unix de forma predeterminada yendo a Archivo> Preferencias> Configuraci\u00f3n y escribiendo eol<\/code> en la barra de b\u00fasqueda de ajustes. El resultado superior debe ser un men\u00fa desplegable para configurar el \u00abEol\u00bb. C\u00e1mbielo a \u00abn\u00bb.<\/p>\n

\"En<\/p>\n

RELACIONADO:<\/strong> C\u00f3mo hacer que su hardware Bash Scripts sea consciente<\/em><\/strong><\/p>\n<\/div>\n