Probleme mit einem aus KMail herauskopierten Script
Scripte aus der Mailanzeige von KMail herauskopieren
Ich habe das Script download.sh1 gemailt bekommen.
Das habe ich per Copy&Paste aus
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.
Als ich mir das Script jedoch mit
Mit dem mcedit sieht das richtig codierte Leerzeichen so aus (rote Umrandung):
Das „falsch“ codierte Leerzeichen sieht im mcedit dagegen so aus (rote Umrandung): 1
ABER:
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
Und da
for .. ; do irgendwas;
ein
for .. ; do irgendwas;
heraus.
Die Lösung
Entweder
- im Script die problematischen Leerzeichen von Hand durch die „richtigen“ Leerzeichen ersetzen (aufwendig!)
- die email abspeichern und dann mit einem Texteditor alles außer dem Script entfernen
- mit
sed und etwas regex aufräumen
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(); ?>
—
1 Download zum selber herumspielen
2