No existe dicho error de archivo o directorio al intentar ejecutar el script de inicio en Debian

11

Muy nuevo en Debian (Raspbian), y estoy luchando con esto por unos días. Tengo un script de inicio que quiero ejecutar en el inicio.

He ejecutado los siguientes comandos, para hacer que el script sea ejecutable y agregarlo con los parámetros predeterminados a la secuencia de inicio.

sudo chmod 755 /etc/init.d/testsam
sudo update-rc.d testsam defaults

Cuando intento probar el script, ejecuto lo siguiente:

sudo /etc/init.d/testsam start

Pero al hacerlo, aparece un error: no se puede ejecutar /etc/init.d/testsam: no existe ese archivo o directorio.

Minimicé el guión a lo más básico, pero aún no tengo idea de la razón real. ¿Espero que alguien pueda señalarme la solución correcta? Este es el guión actual.

#! /bin/bash

# /etc/init.d/testsam

case "$1" in
 start)
        #echo "starting script"
        ;;
 stop)
        #echo "stopping script"
        ;;
 *)
        #echo "Usage: /etc/init.d/testsam {start|stop}"
        exit 1
         ;;
esac

exit 0

Gracias por cualquier ayuda

Sam Vanhoutte
fuente

Respuestas:

22

Probablemente tenga un retorno de carro ( ^M) al final de su #!línea.

El formato de la #!línea es muy estricto y el retorno de carro no está permitido allí, a menos que se llame a su intérprete/bin/bash^M

Nunca habrá retornos de carro en un archivo creado con un editor de Unix adecuado, a menos que haga todo lo posible para agregarlos.

Al editar un archivo existente que ya utiliza terminaciones de línea CRLF, los retornos de carro pueden estar ocultos para usted. Por ejemplo, vim hace eso. Pero también dice [dos]en la línea de estado para advertirle que el archivo está en formato DOS. Luego puede decir :set fileformat=unixy guardar el archivo para convertirlo.


fuente
55
Para verificar si este es realmente el problema, hazlo cat -v /etc/inti.d/testsam. Si tiene un retorno de carro erróneo, aparecerá como ^M.
Jenny D
¡Gracias por la ayuda rápida! Había recibido el archivo a través del comando wget y, de hecho, era un archivo basado en Windows.
Sam Vanhoutte
En algunos servidores podría usar, dos2unixpero ¿qué haces cuando el host no permite que ese comando borre todas las instancias ^M?
user33777
1
Otra forma de solucionar el problema:sed -i -e 's/\r//g' /path/file
Al Belsky