Enter ist nicht gleich Enter

…oder wie rede ich „Windows“ mit meinem Linux-Rechner.😉

Um in einer Kommandozeile einen Befehl abzusetzen, drückt man für gewöhnlich die Eingabe-Taste, doch nicht immer versteht der Computer das. Vor allem nicht, wenn verschiedene Betriebssysteme dabei miteinander kommunizieren. Das musste ich kürzlich feststellen, als ich mich via Telnet von einem Linux Server auf einem Windows-Client einloggen wollte. Ich wurde aufgefordert, Benutzernamen und Passwort einzugeben. Nachdem ich den Namen eingab und Enter drückte, verstand der Windowsrechner das nicht. Im Terminal erschien noch einmal der Benutzername; sonst nichts.

Grund dafür, sind die Verschiedenen Dialekte der Betriebssysteme. Während bei Linux das ASCII-Zeichen „10“ für „Enter“ verwendet wird, so sind es bei Windows gleich zwei Zeichen: „13“ und „10“. Das Linux-Terminal sendet also bloß „10“ an den Windows-Rechner und der versteht nur Bahnhof. Bis einschließlich MacOS 9 lieferte der Druck auf die Enter-Taste übrigens das ASCII-Zeichen „13“. Ab OS 10, ist es wie bei BSD und Linux die „10“.

Bei Linux hat man dieses Problem durch Shortcuts gelöst. Den „Line Feed“, das ASCII-Zeichen mit der Nummer 10, erzeugt man mit „Strg + j“ und „Carriage Return“, die Nummer 13 der ASCII-Zeichen, mit „Strg + m“. Auf diese Weise kann man aus der Konsole auch mit Windows reden.

In einem Skript kann man Escape-Sequenzen verwenden z.B.:

echo -e „Dies ist ein Befehl\r“

Das „-e“ ist die Option für Escape-Sequenzen, welche ansonsten als normale Zeichenkette ausgegeben werden.“\r“ ist die Escape-Sequenz für „Carriage Return“. Die für „Line Feed“ ist „\n“. Ein „Line Feed“ muss allerdings nicht extra angehangen werden, das macht „echo“ automatisch, wenn es nicht mit der Option „-n“ unterdrückt wird.

Sind Windows-Dateipfade im Spiel, sollte man die Escape-Sequenzen extra senden, da Windows „\“ für die Pfade benutzt und es mit der Option „-e“ daher zu Fehlinterpretationen kommen kann. Z.B.:

echo -n „COPY c:\eine\datei c:\in\den\ordner\“
echo -e „\r“

„-n“ unterdrückt den „Line Feed“, so dass das geechote „\r“ direkt an die Zeichenkette angehangen wird.

Übrigens: Auf vielen Tastaturen findet man noch ein „Enter“ und ein „Return“ als Tasten. Früher war eine davon mit „Line Feed“ und die andere mit „Carriage Return“ belegt. Manche Anwendungen machen von diesem Unterschied immer noch gebrauch.

Wichtig: „echo -e“ läuft nicht in allen Shells. Mehr POSIX ist „printf“ für Ausgaben mit Escape-Sequenzen und „echo“ höchstens mit „-n“, dann klappts auch auf (den meisten?) anderen Unixoiden Systemen.

~ von tofuzius - November 21, 2012.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

 
%d Bloggern gefällt das: