fichero - bin bash m bad interpreter no such file or directory debian
-bash:./my_script:/bin/bash ^ M: intérprete incorrecto: no existe tal archivo o directorio (11)
Esta pregunta ya tiene una respuesta aquí:
Estoy aprendiendo a través de este tutorial para aprender scripts de bash para automatizar algunas tareas para mí. 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 los permisos de lectura / escritura / ejecución
chmod 755 my_script
Luego, cuando ingreso a ./my_script
, ./my_script
el error que aparece en el título.
Algunas preguntas similares querían verlas, así que creo que podrían ayudar:
which bash
/ bin / bash
y
echo $PATH
/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / bin / mh
Intenté agregar el directorio actual a PATH
, pero eso no funciona ...
Atom tiene un paquete selector de final de línea incorporado
Más detalles aquí: https://github.com/atom/line-ending-selector
Ejecutar el siguiente comando en la terminal
sed -i -e ''s//r$//'' scriptname.sh
Entonces intenta
./scriptname.sh
Deberia de funcionar.
El problema es con la finalización de dos líneas. Lo siguiente lo convertiremos para unix.
dos2unix file_name
NB: es posible que necesite instalar dos2unix primero con yum install dos2unix
otra forma de hacerlo es usando el comando sed
para buscar y reemplazar los caracteres de finalización de la línea dos al formato Unix:
$sed -i -e ''s//r$//'' your_script.sh
En notepad ++ puede configurarlo para el archivo específicamente presionando
Editar -> Conversión EOL -> Formato UNIX / OSX
Esto se debe a la edición de archivos en Windows, a la importación y ejecución en Unix.
dos2unix -k -o filename
debe hacer el truco.
He visto este problema al crear scripts en Windows env y luego pasar a ejecutarse en un entorno Unix.
Intente ejecutar dos2unix
en el script:
http://dos2unix.sourceforge.net/
O simplemente reescriba el script en su env de Unix usando vi
y pruebe.
Unix usa diferentes finales de línea, por lo que no puede leer el archivo que creó en Windows. Por lo tanto, está viendo a M como un personaje ilegal.
Si desea escribir un archivo en Windows y luego transferir el puerto, asegúrese de que su editor esté configurado para crear archivos en formato UNIX.
En notepad ++ en la parte inferior derecha de la pantalla, le indica el formato del documento. Por defecto, dirá Dos/Windows
. Para cambiarlo ve a
- ajustes-> preferencias
- Nuevo documento / pestaña de directorio por defecto
- Selecciona el formato como Unix y cierra.
- crear un nuevo documento
Me desarrollo en Windows y Mac / Linux al mismo tiempo y evito este ^ M-error simplemente ejecutando mis scripts como lo hago en Windows:
$ php ./my_script
No hay necesidad de cambiar los finales de línea.
Para los usuarios de Eclipse , puede cambiar la codificación del archivo directamente desde el menú File > Convert Line Delimiters To > Unix (LF, /n, 0Α, ¶)
:
O cambie el New text file line delimiter
a Other: Unix
en Window > Preferences > General > Workspace
Panel de área de Window > Preferences > General > Workspace
:
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 parte inferior izquierda del mensaje Save As
, hay menús desplegables para codificación de caracteres y final de línea. Cambie la línea de terminación de Windows
a Unix/Linux
luego Guardar.
Si usa Sublime Text en Windows o Mac para editar sus scripts:
Haga clic en View > Line Endings > Unix
y guarde el archivo nuevamente.
Su archivo tiene finales de línea de Windows, lo que confunde a Linux.
Eliminar los caracteres espurios CR. Puedes hacerlo con el siguiente comando:
$ sed -i -e ''s//r$//'' setup.sh