-bash: ./my_script: / bin / bash ^ M: intérprete incorrecto: ningún archivo o directorio

Estoy aprendiendo a través de este tutorial a aprender scripts bash para automatizar algunas tareas para mí. Me estoy conectando a un servidor usando masilla.

El script, ubicado en .../Documents/LOG , es:

 #!/bin/bash # My first script echo "Hello World!" 

Y ejecuté lo siguiente para permisos de lectura / escritura / ejecución

 chmod 755 my_script 

Luego, cuando ingreso ./my_script , ./my_script el error en el título.

Algunas preguntas similares querían verlas, por lo que creo que podrían ser útiles:

 which bash 

/ bin / bash

y

 echo $PATH 

/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / juegos: / usr / bin / mh

Intenté agregar el directorio actual a PATH , pero eso no funciona.

He visto este problema al crear scripts en el entorno de Windows y, a continuación, trasladarlo para ejecutarlo en un entorno Unix.

Intenta ejecutar esto en el script:

http://linuxcommand.org/man_pages/dos2unix1.html

Enlace actualizado:

http://dos2unix.sourceforge.net/

O simplemente reescribe la secuencia de comandos en tu entorno Unix usando vi y prueba.

Unix utiliza diferentes alimentaciones de línea y retornos de carro, por lo que no puede leer el archivo que creó en Windows. Por lo tanto, está viendo ^ M como un personaje ilegal.

Si desea escribir un archivo en Windows y luego realizar un puerto de acceso, asegúrese de que su editor esté configurado para crear archivos en formato UNIX.

En Notepad ++ en la esquina inferior derecha de la pantalla, te dice el formato del documento. Por defecto, dirá Dos\Windows . Para cambiarlo ve a

  • configuraciones-> preferencias
  • nuevo documento / pestaña del directorio predeterminado
  • seleccione el formato como unix y cierre
  • crea un nuevo documento

Ejecuta el siguiente comando en la terminal

 sed -i -e 's/\r$//' scriptname.sh 

Entonces intenta

 ./scriptname.sh 

Deberia de funcionar.

Si usa Sublime Text en Windows o Mac para editar sus scripts:

Haga clic en View > Line Endings > Unix y guarde el archivo nuevamente.

enter image description here

Esto es causado por la edición del archivo en Windows y la importación y ejecución en Unix.

dos2unix -k -o filename debería hacer el truco.

En Notepad ++ puede configurarlo para el archivo específicamente presionando

Editar -> Conversión EOL -> Formato UNIX / OSX

enter image description here

el problema es con el final de dos líneas. Lo siguiente lo convertirá para Unix

 dos2unix file_name 

NB: puede que necesite instalar dos2unix primero con yum install dos2unix

Otra forma de hacerlo es usar el comando sed para buscar y reemplazar los caracteres de final de línea dos en formato Unix:

 $sed -i -e 's/\r$//' your_script.sh 

Su archivo tiene terminaciones de línea en Windows, lo que confunde a Linux.

Elimina los caracteres falsos de CR. Puedes hacerlo con el siguiente comando:

  $ sed -i -e 's/\r$//' setup.sh 

Para los usuarios de Eclipse , puede cambiar la encoding del archivo directamente desde el menú File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶) :

Eclipse cambia la codificación del archivo

O cambie el New text file line delimiter a Other: Unix en Window > Preferences > General > Workspace Panel de área de Window > Preferences > General > Workspace :

Configuración del espacio de trabajo de Eclipse

Pude resolver el problema abriendo el script en Gedit y guardándolo con la opción de Line Ending adecuada:

Archivo> Guardar como …

En la esquina inferior izquierda del aviso Save As , hay menús desplegables para Codificación de caracteres y Finalización de línea. Cambie el final de línea de Windows a Unix/Linux luego Guardar.

gedit

Atom tiene un paquete selector de final de línea incorporado

Más detalles aquí: https://github.com/atom/line-ending-selector

Desarrollo en Windows y Mac / Linux al mismo tiempo y evito este ^ error M simplemente ejecutando mis scripts como lo hago en Windows:

$ php ./my_script

No es necesario cambiar las terminaciones de línea.