bash fehler?
-bash: ./start.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
was ist da der Fehler?
3 Antworten
Hallo
bash: ./start.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
zeig doch mal:
cat start.sh
Damit wir uns ein Bild davon machen können wie das Script arbeitet bzw. arbeiten soll.
was ist da der Fehler?
Da steht "defekter Interpreter"; es sollte aber in der ersten Zeile stehen:
#!/bin/bash
ohne Leerzeichen oder etwas wegzulassen. Du kannst auch die Angabe des Interpeters ganz weglasen und das Script so starten:
bash start.sh
Dann wäre es egal ob die Datei eine Angabe macht und ob die Datei ausführbar ist, weil Du ja den Interpreter (die bash) selbst startest.
Linuxhase
@guenterhalt
mit cat start.sh wird man da nicht weiter kommen
Dann halt mit:
cat -E
# und/oder
cat -T
Aber selbst dafür sind Code-TAGs nötig. ;-)
@Mrciller2
Das ging an Dich, denn so wäre es besser gewesen:
#!/bin/bash
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
while true
do
java -server -Xms1024M -Xmx1024M -jar spigot-1.8.8.jar
echo -e 'If you want to completely stop the server process now, press STRG-C before the\ntime is up!'
echo "Rebooting in:"
for i in 5 4 3 2 1
do
echo "$i...
Und schon sieht man das da etwas fehlt.
- Wenn ein do da steht muss es auch mit done enden.
- Ebenso muß ein for mit done enden.
- Und statt cd "$BINDIR" würde ich cd ${BINDIR} nehmen
Was man leider nicht sieht sind die Zeilenenden :-(
Schreib halt das Script mit einem unixoiden Texteditor ab und speichere es in eine neue Datei.
#!/bin/bash
BINDIR=$(dirname "$(readlink -fn "$0")")
cd ${BINDIR}
while true
do
java -server -Xms1024M -Xmx1024M -jar spigot-1.8.8.jar
echo -e "If you want to completely stop the server process now, press STRG-C before the\ntime is up!"
echo "Rebooting in:"
done
for i in 5 4 3 2 1
do
echo ${i}
done
exit 1
Aber auch so macht das Ganze gar keinen Sinn. Ein sauber neu geschriebenes Script muss hier her.
Linuxhase
mit cat start.sh wird man da nicht weiter kommen, denn viele Editoren oder Anzeigeprogramme benutzen die Kombination 0d0aH wie 0dH.
Sicherheit schafft da nur z.B. ein Hex-Editor wie ghex.
bash start.sh wird dann vielleicht die 1. Zeile überspringen, sollte dann aber schon die nächste Zeile als Fehler interpretieren.
das ist kein bash-Fehler. Du hast mit 100% Sicherheit die Datei mit einem Windows-Editor bearbeitet und dann in das Linux-System übernommen.
Innerhalb eines Computers passiert so etwas kaum noch, denn die Tools erkennen das selbst.
Bei Übertragungen mit ftp und der Option "bin" wird jedes Byte übertragen, so auch die "Microsoft-Zeilen-Ende-Kennung".
Mit der Option "ascii" ist das anders. Beide FTP-Programme (Sender + Empfänger) wissen dann, was zu tun ist.
Falsche Zeilenendemarkierungen in dem Script (wahrscheinlich im "Windows"-Format abgespeichert, also mit "carriage return + line feed").
root@5825c732c828f5 lobby $ cat start.sh
#!/bin/bash
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
while true
do
java -server -Xms1024M -Xmx1024M -jar spigot-1.8.8.jar
echo -e 'If you want to completely stop the server process now, press STRG-C before the\ntime is up!'
echo "Rebooting in:"
for i in 5 4 3 2 1
do
echo "$i...