Aucune erreur de fichier ou de répertoire de ce type lors de la tentative d'exécution du script de démarrage dans Debian

11

Très nouveau sur Debian (Raspbian), et je me bats sur celui-ci depuis quelques jours. J'ai un script de démarrage que je veux exécuter au démarrage.

J'ai exécuté les commandes suivantes, pour rendre le script exécutable et pour l'ajouter avec les paramètres par défaut à la séquence de démarrage.

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

Lorsque j'essaie de tester le script, j'exécute ce qui suit:

sudo /etc/init.d/testsam start

Mais ce faisant, j'obtiens une erreur: impossible d'exécuter /etc/init.d/testsam: Aucun fichier ou répertoire de ce type.

J'ai réduit le script à un niveau très basique, mais je n'ai toujours pas la moindre idée de la raison réelle. J'espère que quelqu'un pourra m'indiquer la bonne solution? Ceci est le script actuel.

#! /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

Merci pour toute aide

Sam Vanhoutte
la source

Réponses:

22

Vous avez probablement un retour chariot ( ^M) à la fin de votre #!ligne.

Le format de la #!ligne est très strict et le retour chariot n'y est pas autorisé, sauf si votre interprète est réellement appelé/bin/bash^M

Il n'y aura jamais de retour chariot dans un fichier créé avec un éditeur Unix approprié, à moins que vous ne vous efforciez de les ajouter.

Lors de la modification d'un fichier existant qui utilise déjà des fins de ligne CRLF, les retours chariot peuvent vous être cachés. Par exemple, vim fait cela. Mais il indique également [dos]dans la ligne d'état pour vous avertir que le fichier est au format DOS. Vous pouvez ensuite dire :set fileformat=unixet enregistrer le fichier pour le convertir.


la source
5
Pour vérifier si c'est bien le problème, faites-le cat -v /etc/inti.d/testsam. Si vous avez un retour chariot erroné, il apparaîtra comme ^M.
Jenny D
merci pour l'aide rapide! j'avais reçu le fichier via la commande wget et c'était en effet un fichier basé sur Windows.
Sam Vanhoutte
Sur certains serveurs, je pourrais utiliser, dos2unixmais que faites-vous lorsque l'hôte ne permet pas à cette commande d'effacer toutes les instances de ^M?
user33777
1
Une autre façon de résoudre le problème:sed -i -e 's/\r//g' /path/file
Al Belsky