/bin/bash^M: bad interpreter: No such file or directory

Wenn ihr bei der Ausführung eines Scriptes die Meldung

/bin/bash^M: bad interpreter: No such file or directory

oder

/bin/sh^M: bad interpreter: No such file or directory

bekommt, liegt das daran, dass ihr das Script vermutlich auf einem Windows-PC (oder Mac) erstellt und dann auf den Linux Rechner kopiert habt.
Das Skript gibt an, dass es von einer Shell ausgeführt werden muss, die sich unter /bin/bash^M befindet. Es gibt keine solche Datei: sie heißt /bin/bash.

Das ^M ist ein Wagenrücklaufzeichen (carriage return). Linux verwendet das Zeilenvorschubzeichen, um das Ende einer Zeile zu markieren, während Windows die zweistellige Sequenz CR LF verwendet. Eure Datei hat Windows-Zeilenenden, womit Linux bei der Interpretation des Scripts nicht zurecht kommt.

Um das Script also ausführen zu können, müsste ihr das Windows Zeilenende durch ein Linux Zeilenende ersetzen.

Weg 1:
Folgenden Befehl ausführen:
sed -i -e ’s/\r$//‘ mein-script.sh

Weg 2:
Ihr verwendet das Tool dos2unix:
https://sourceforge.net/projects/dos2unix/
dos2unix includes utilities to convert text files with DOS or MAC line breaks to Unix line breaks and vice versa. It is an update of Benjamin Lin’s implementations.“

Weg 3:
In vim (oder vi) könnt ihr auch :set ff=unix benutzen und dann die Datei speichern, oder :set ff=dos, um die DOS-Formatierung wieder zu erhalten.
Also in vim öffnen, auf unix setzen und speichern:
:set ff=unix
:wq

Weg 4:
Ihr öffnet das Script in einem Editor wie gedit, wählt „Speichern als …“ und wählt da „Zeilenende: Unix/Linux“ aus.

Danach ist das Script wieder lauffähig.

Last updated by at .

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..