usr -bash:./my_script:/bin/bash ^ M: schlechter Interpreter: Keine solche Datei oder Verzeichnis




usr bin perl m defekter interpreter datei oder verzeichnis nicht gefunden (9)

Diese Frage hat hier bereits eine Antwort:

Ich lerne durch dieses Tutorial Bash-Skripte zu lernen, um ein paar Aufgaben für mich zu automatisieren. Ich verbinde mich mit einem Server mit Putty.

Das Skript in .../Documents/LOG lautet:

#!/bin/bash
# My first script
echo "Hello World!"

Und ich habe Folgendes für Lese- / Schreib- / Ausführungsberechtigungen ausgeführt

chmod 755 my_script

Wenn ich dann ./my_script eintrage, ./my_script ich den Fehler im Titel.

Einige ähnliche Fragen wollten diese sehen, also denke ich, dass sie helfen könnten:

which bash

/ bin / bash

und

echo $PATH

/ usr / local / sbin: / usr / lokal / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / bin / mh

Ich habe versucht, das aktuelle Verzeichnis zu PATH hinzuzufügen, aber das funktioniert nicht ..


Für Eclipse Benutzer können Sie die File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶) entweder direkt im Menü File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶) :

Oder ändern Sie den New text file line delimiter für die New text file line delimiter in " Other: Unix im Window > Preferences > General > Workspace :


Ihre Datei hat Windows-Zeilenenden, was Linux verwirrend ist.

Entfernen Sie die falschen CR-Zeichen. Sie können es mit dem folgenden Befehl tun:

 $ sed -i -e 's/\r$//' setup.sh

Ich konnte das Problem lösen, indem ich das Skript in Gedit öffne und es mit der richtigen Line Ending Option speichere:

Datei> Speichern unter ...

Unten links in der Eingabeaufforderung Save As unter befinden sich Dropdown-Menüs für Zeichencodierung und Zeilenende. Ändern Sie die Zeilenende von Windows zu Unix/Linux dann Speichern.



Führen Sie den folgenden Befehl im Terminal aus

sed -i -e 's/\r$//' scriptname.sh

Dann versuche es

./scriptname.sh

Es sollte funktionieren.


Problem ist mit DOS-Zeilenende. Folgendes wird es für Unix konvertieren

dos2unix file_name

NB: Möglicherweise müssen Sie dos2unix zuerst mit yum install dos2unix

Eine andere Möglichkeit, dies zu tun, ist die Verwendung des Befehls sed , um die Zeilenendezeichen der DOS-Zeile nach dem Unix-Format zu suchen und zu ersetzen:

$sed -i -e 's/\r$//' your_script.sh

Wenn Sie unter Windows oder Mac Sublime Text verwenden , um Ihre Skripte zu bearbeiten:

Klicken Sie auf View > Line Endings > Unix und speichern Sie die Datei erneut.


Ich entwickle gleichzeitig auf Windows und Mac / Linux und vermeide diesen ^ M-Fehler, indem ich einfach meine Skripte wie in Windows laufe:

$ php ./my_script

Keine Notwendigkeit, Zeilenenden zu ändern.


Dies wird durch das Bearbeiten der Datei in Windows und das Importieren und Ausführen in Unix verursacht.

dos2unix -k -o filename sollte den Trick machen.





bash