2013-06-16 3 views

Antwort

58

entfernen ^M Steuer Zeichen mit

perl -i -pe 'y|\r||d' script.pl 
+1

@ Сухой27 können Sie es bitte erklären .. – Bharat

+0

@Bharat es tut in-Place-Bearbeitung der Datei, wo es jedes Vorkommen von '\ r' Steuerzeichen entfernt (oder'^M' als Shell bezieht sich darauf). –

38

/usr/bin/perl^M:

Entfernen Sie die ^M am Ende usr/bin/perl von der #! Linie am Anfang des Skripts. Das ist ein falscher ASCII-13-Charakter, der die Shell verrückt macht.

Möglicherweise müssen Sie die Datei mit einem Binäreditor überprüfen, wenn Sie das Zeichen nicht sehen.

Sie könnte so tun, um die Datei zu Mac Zeilenende-Format zu konvertieren:

$ vi your_script.sh 

einmal in vi Typ:

:set ff=unix 

:x 
+1

hat es nicht funktioniert form me :( – Fisk

+1

"Making the Interpreter verrückt werden" ist nicht korrekt. Der Fehler kommt vom Kernel/Loader, weil es den '\ r' Teil des Dateinamens und nicht finden kann dieser Pfad. Kein Dolmetscher wird jemals gestartet. –

+0

@AndrewMedico: danke für die Bemerkung, vollständig auf Punkt! Ich redigierte meine Antwort ... – sergio

5

Sie scheinen seltsam Zeilenende in Ihrem Skript zu haben: ^M ist ein Wagenrücklauf \r. Verwandeln Sie Ihr Skript in Unix-Zeilenendungen (nur \n statt \r\n, das ist die Zeile, die auf Windows-Systemen endet).

+0

aber ich arbeite an mac –

+2

OS X ist ein Unix-System. Einige Tools (Editoren) wurden jedoch möglicherweise für Windows-Zeilenenden für Interop festgelegt.Sie erhalten auch schlechte Zeilenenden, wenn Sie Dateien als Binärdateien von einem Windows-Computer übertragen. Hast du das Skript selbst geschrieben oder von irgendwo kopiert? – amon

+0

nahm es von meinem Kollegen –

2

Einen alternativen Ansatz:

sudo ln -s /usr/bin/perl /usr/local/bin/perl`echo -e '\r'` 
+7

Ich ließ eine der lokalen Katzen diese Antwort lesen und sie wich zurück, jaulte und sprang dann 20 Fuß hoch in die Luft, um über ein Dach zu fliehen. Ich fürchte auch, dass in der kurzen Zeit, in der Ihre Antwort der freien Luft meiner Stadt ausgesetzt war, der Lovecraftian Horror es erlaubt haben muss, es zu betreten. Ich werde dir mehr erzählen, nachdem ich die Katze gefunden und seziert habe. –

5

Das Problem ist, dass Sie versuchen, auf Linux/Unix/OSX Maschine DOS/Windows-Text-Format zu verwenden.

In DOS/Windows-Textdateien ist ein Zeilenumbruch, auch als Zeilenumbruch bezeichnet, eine Kombination aus zwei Zeichen: Carriage Return (CR) gefolgt von Line Feed (LF). In Unix-Textdateien ist ein Zeilenumbruch ein einzelnes Zeichen: der Zeilenvorschub (LF).

dos2unix können für Sie die Codierung von Dateien konvertieren, in Beispiel:

dos2unix yourfile yourfile 

Für Hilfe laufen: man dos2unix.

2

Und wenn Sie Sublime Text bevorzugen - gehen Sie einfach auf Ansicht -> Zeilenenden und überprüfen Sie Unix.