/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.