Kein solcher Datei- oder Verzeichnisfehler beim Versuch, ein Startskript in Debian auszuführen

11

Sehr neu bei Debian (Raspbian), und ich habe ein paar Tage damit zu kämpfen. Ich habe ein Startskript, das ich beim Start ausführen möchte.

Ich habe die folgenden Befehle ausgeführt, um das Skript ausführbar zu machen und es mit den Standardparametern zur Startsequenz hinzuzufügen.

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

Beim Versuch, das Skript zu testen, führe ich Folgendes aus:

sudo /etc/init.d/testsam start

Dabei wird jedoch eine Fehlermeldung angezeigt: /etc/init.d/testsam kann nicht ausgeführt werden: Keine solche Datei oder kein solches Verzeichnis.

Ich habe das Skript auf das Wesentliche minimiert, habe aber immer noch keine Ahnung vom tatsächlichen Grund. Ich hoffe, jemand kann mich auf die richtige Lösung hinweisen? Dies ist derzeit das Skript.

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

Vielen Dank für jede Hilfe

Sam Vanhoutte
quelle

Antworten:

22

Sie haben wahrscheinlich einen Wagenrücklauf ( ^M) am Ende Ihrer #!Zeile.

Das Format der #!Zeile ist sehr streng, und Wagenrücklauf ist dort nicht zulässig, es sei denn, Ihr Dolmetscher wird tatsächlich angerufen/bin/bash^M

In einer Datei, die mit einem geeigneten Unix-Editor erstellt wurde, werden niemals Wagenrückläufe angezeigt, es sei denn, Sie geben sich alle Mühe, diese hinzuzufügen.

Wenn Sie eine vorhandene Datei bearbeiten, die bereits CRLF-Zeilenenden verwendet, werden die Zeilenumbrüche möglicherweise für Sie ausgeblendet. Zum Beispiel macht vim das. Aber es sagt auch [dos]in der Statuszeile , Sie zu warnen , dass die Datei im DOS - Format ist. Sie können dann :set fileformat=unixdie Datei sagen und speichern, um sie zu konvertieren.


quelle
5
Um zu überprüfen, ob dies tatsächlich das Problem ist, tun Sie dies cat -v /etc/inti.d/testsam. Wenn Sie einen fehlerhaften Wagenrücklauf haben, wird dieser als angezeigt ^M.
Jenny D
danke für die schnelle hilfe! Ich hatte die Datei über den Befehl wget erhalten und es war in der Tat eine Windows-basierte Datei.
Sam Vanhoutte
Auf einigen Servern könnte ich verwenden, dos2unixaber was tun Sie, wenn der Host nicht zulässt, dass dieser Befehl alle Instanzen löscht ^M?
user33777
1
Eine andere Möglichkeit, das Problem zu beheben:sed -i -e 's/\r//g' /path/file
Al Belsky