Dies ist eine alte Version des Dokuments! —-

Fehlersuche unter Linux

Mir bekannte Fehlerquellen

Scripte

Scripte aus der Mailanzeige von KMail herauskopieren

Ich habe das Script download.sh gemailt bekommen.
Das habe ich per Copy&Paste aus KMail in einen Editor kopiert, in ~/bin abgespeichert und mit chmod ausführbar gemacht.

Das Problem

Beim Ausführen erhielt ich folgenden Fehler:

florian@florian:~/bin> ./download_test.sh 
./download_test.sh: line 7: syntax error near unexpected token `do' 
./download_test.sh: line 7: `  for m in $(seq 1 12); do'

Beim Absender geht es, bei mir nicht. Rätselraten. Probieren.

Die Ursache

Das Script enthält zwei oder mehr aufeinander folgende Leerzeichen.
Das ist eigentlich kein Problem.

Wenn ich mir das Script jedoch mit mcedit angesehen habe, wurde für jedes zweite der aufeinander folgenden Leerzeichen statt 0x20 das Zeichen 0xA0 aus der Zeichentabelle verwendet. Die sehen beide gleich aus, sind auch beides Leerzeichen.
ABER: 0x20 wird auch von der Shell als Leerzeichen erkannt und beim Ausführen ignoriert, 0xA0 wird aber versucht mit auszuführen.

In meinem Fall wollte die Shell also nicht

«for m in $(seq 1 12); do»

sondern

« for m in $(seq 1 12); do»

ausführen.
Beachte das Leerzeichen nach dem «! Das ist das 0xA0.
Und da « for» kein Befehl ist, sondern nur «for», kommt für die Shell anstelle von

for .. ; do irgendwas; for .. ; do irgendwas;

ein

for .. ; do irgendwas; do irgendwas;

heraus.

Die Lösung
  • Entweder im Script die problematischen Leerzeichen von Hand durch die „richtigen“ Leerzeichen ersetzen (aufwendig!)

oder

  • Die email abspeichern und dann mit einem Texteditor alles außer dem Script entfernen.
Anmerkung

Dieses Problem besteht auch mit einzelnen Befehlszeilen, wenn der Absender z.B. zwischen Befehl und Option(en) aus Versehen zwei Leerzeichen gemacht hat.
In diesem Fall einfach das überflüssige Leerzeichen entfernen.

Die Shell selber stört sich selber nicht an zwei oder mehreren Leerzeichen:

 
florian@florian:~/bin> head ../Homepage/bytecamp/grossing.de/index.php 
<?php 
header("Location: home.php"); 
exit(); 
?> 
florian@florian:~/bin> head          ../Homepage/bytecamp/grossing.de/index.php 
<?php 
header("Location: home.php"); 
exit(); 
?> 

Du möchtest selber ein wenig damit herumspielen? Du kannst dir das Script mit den problematischen Leerzeichen herunterladen



Du hast ein Script oder eine Konfigurationsdatei, die du gerne anderen hier zur Verfügung stellen möchtest?
Bitte mit den Kommentaren und eventuell einer Kurzbeschreibung (zum besseren Verständnis) mailen. Danke!
Florian Groß 2009/09/20 21:37


Eigene Werkzeuge