Hallo,
ich bin neulich auf ein Problem gestoßen, welches ich allein noch nicht lösen konnte. Vielleicht könnt ihr mir ja helfen, es ist folgendes:
Wenn ich in einem Bash-Script eine Operation für mehrere Dateien ausführen will empfiehlt sich eine Konstruktion folgendes Typs:
for i in `ls <Verzeichnis>` do <mache-irgendwas-mit-i> done
Das funktioniert spitzenmäßig, bis, ja bis irgendwo Leerzeichen im Dateinamen auftauchen, dann versucht er mit jedem einzelnen Textbaustein das ganze, was natürlich scheitert.
Hat jemand hier eine vage Idee, oder profunde Kenntnisse davon, wie man das umgehen kann?
Vielen Dank schon mal,
Friedrich
On Fri, Nov 21, 2003 at 07:23:53PM +0100, phriedrich wrote:
Hallo,
Hi Friedrich,
Wenn ich in einem Bash-Script eine Operation für mehrere Dateien ausführen will empfiehlt sich eine Konstruktion folgendes Typs:
for i in `ls <Verzeichnis>` do
make_something_with "$i"
done
Ciao, Tobias
P.S.: dein Realname ist irgendwie komisch ;)
Hi Tobias und Namensvetter,
Am Freitag, 21. November 2003 19:48 schrieb Tobias Koenig:
On Fri, Nov 21, 2003 at 07:23:53PM +0100, phriedrich wrote:
Hallo,
Hi Friedrich,
Wenn ich in einem Bash-Script eine Operation für mehrere Dateien ausführen will empfiehlt sich eine Konstruktion folgendes Typs:
for i in `ls <Verzeichnis>` do
make_something_with "$i"
Mal ausprobiert? Bringt nämlich nichts. Problem ist hier das Wortzerlegen, das durch die Standardbelegung des Internal Field Separator (IFS) der Bash sowohl Tab aber auch Leerzeichen als Trennzeichen verwendet. Genau, einfach mal IDS auf nur Tab setzen, und schon klappts auch mit den leergezeichneten Namen ;)
Z.B.: #!/bin/bash tempIFS=$IFS IFS=$'\t' for i in `ls .` do echo "$i" done IFS=$tempIFS
siehe auch: man:/bash Stichworte Word Splitting, IFS
Komisch nur: entgegen der Angaben funktioniert auch des Nichtsetzen "IFS=", obwohl dann eigentlich wieder die Defaultwerte gelten sollen... Seltsam.
done
Ciao, Tobias
P.S.: dein Realname ist irgendwie komisch ;)
Aber für ihn bestimmt identitätsstiftend :)
Friedrich (weiterer)
On Fri, 21 Nov 2003 21:01:14 +0100 "Friedrich W. H. Kossebau" Friedrich.W.H@Kossebau.de wrote:
Hi Tobias und Namensvetter,
Am Freitag, 21. November 2003 19:48 schrieb Tobias Koenig:
On Fri, Nov 21, 2003 at 07:23:53PM +0100, phriedrich wrote:
Hallo,
Hi Friedrich,
Wenn ich in einem Bash-Script eine Operation für mehrere Dateien ausführen will empfiehlt sich eine Konstruktion folgendes Typs:
for i in `ls <Verzeichnis>` do
make_something_with "$i"
Mal ausprobiert? Bringt nämlich nichts. Problem ist hier das Wortzerlegen, das durch die Standardbelegung des Internal Field Separator (IFS) der Bash sowohl Tab aber auch Leerzeichen als Trennzeichen verwendet. Genau, einfach mal IDS auf nur Tab setzen, und schon klappts auch mit den leergezeichneten Namen ;)
Z.B.: #!/bin/bash tempIFS=$IFS IFS=$'\t' for i in `ls .` do echo "$i" done IFS=$tempIFS
siehe auch: man:/bash Stichworte Word Splitting, IFS
Komisch nur: entgegen der Angaben funktioniert auch des Nichtsetzen "IFS=", obwohl dann eigentlich wieder die Defaultwerte gelten sollen... Seltsam.
done
Ciao, Tobias
P.S.: dein Realname ist irgendwie komisch ;)
Aber für ihn bestimmt identitätsstiftend :)
Friedrich (weiterer)
Danke für den Tipp, werd ich gleich Testen...wird sicher gehen.
Auf bald auch mal am Mittwoch wieder,
Friedrich
Hi Tobias,
for i in `ls <Verzeichnis>` do
make_something_with "$i"
done
Ja, hätte ich auch erwartet, geht aber irgendwie nicht. Ich suche nochmal nach Blödheitsfehlern von mir, aber es könnte auch am System liegen: Mandrake 9.1 und 9.2. 9.2 hat folgende Versionen der Bash: bash1-1.14.7-31mdk bash-2.05b-14mdk
Die Mandrake-Mailinglisten scheinen gerade down zu sein, sonst hätte ich mich dort schon mal gemeldet.
Danke jedenfalls für den Versuch.
P.S.: dein Realname ist irgendwie komisch ;)
Wie jetzt?
Byebye,
Friedrich
Hi Stefan,
On Fri, Nov 21, 2003 at 20:05:28 +0100, Stefan Lagotzki wrote:
---> es sollte mit befehl "$i" fuer Dateinamen mit Leerzeichen funktionieren.
Nein, weil die Liste hinter "for i in" schon falsch separiert wird.
bye, Chris
Christian Perle wrote:
---> es sollte mit befehl "$i" fuer Dateinamen mit Leerzeichen funktionieren.
Nein, weil die Liste hinter "for i in" schon falsch separiert wird.
Peinlich. Ich verwende sonst fast nie 'for'-Schleifen und hatte es nur mit einigen Befehlen getestet -- da funktioniert es ja normalerweise mit $i nicht, sondern nur mit "$i".
Danke fuer den Hinweis. Stefan
.
Hi Friedrich,
hat da jemand "bash" gesagt? :)
On Fri, Nov 21, 2003 at 19:23:53 +0100, phriedrich wrote:
Wenn ich in einem Bash-Script eine Operation für mehrere Dateien ausführen will empfiehlt sich eine Konstruktion folgendes Typs:
for i in `ls <Verzeichnis>` do
<mache-irgendwas-mit-i> done
Das funktioniert spitzenmäßig, bis, ja bis irgendwo Leerzeichen im Dateinamen auftauchen, dann versucht er mit jedem einzelnen Textbaustein das ganze, was natürlich scheitert.
Klar, die for-Schleife iteriert ueber whitespace-separierte Listen[1]. Du kannst stattdessen read in einer while-Schleife aus einer Pipe lesen lassen:
ls <Verzeichnis> | while read i do <mache-irgendwas-mit-i> done
[1] Man kann mit der Shellvariable IFS auch alternative Separatorzeichen setzen.
bye, Chris
am Fri, dem 21.11.2003, um 19:23:53 +0100 mailte phriedrich folgendes:
for i in `ls <Verzeichnis>` do
<mache-irgendwas-mit-i> done
for i in ./blöde_namen/* ; do echo "$i" && cat "$i" ; done ./blöde_namen/file1 bla fasel ./blöde_namen/file 1 foo bar
CF.: Ernyanzr rejüafpug
Andreas
On 21.11.03 Andreas Kretschmer (kretschmer@kaufbach.delug.de) wrote:
Moin,
CF.: Ernyanzr rejüafpug
Mein einfaches:
# rot13 En-/Decoding macro pager \er "|formail -I ''|tr 'a-zA-Z' 'n-za-mN-ZA-M'|less\n"
in der .muttrc stellt leider das ü nicht korrekt dar. Kennt jemand eine bessere Lösung?
H.
Hallo.
On Fri, 21 Nov 2003 23:10:34 +0100 Hilmar Preusse hille42@web.de wrote:
On 21.11.03 Andreas Kretschmer (kretschmer@kaufbach.delug.de) wrote:
Moin,
CF.: Ernyanzr rejüafpug
Mein einfaches:
# rot13 En-/Decoding macro pager \er "|formail -I ''|tr 'a-zA-Z' 'n-za-mN-ZA-M'|less\n"
in der .muttrc stellt leider das ü nicht korrekt dar. Kennt jemand eine bessere Lösung?
H.
rotix?
* app-crypt/rotix Latest version available: 0.83 Latest version installed: 0.83 Size of downloaded files: 14 kB Homepage: http://elektron.its.tudelft.nl/~hemmin98/rotix.html Description: Rotix allows you to generate rotational obfuscations.
Vielleicht gibts nochwas anderes, aber das habe ich auf Anhieb gefunden. Ich glaube in den bsd-games ist auch ein rot13...
Grüße Frank Benkstein.
On 22.11.03 Frank Benkstein (benkstein@math.tu-dresden.de) wrote:
On Fri, 21 Nov 2003 23:10:34 +0100 Hilmar Preusse hille42@web.de wrote:
Moin,
in der .muttrc stellt leider das ü nicht korrekt dar. Kennt jemand eine bessere Lösung?
rotix?
- app-crypt/rotix
Das Rotieren an sich funktioniert ja. Nur man müßte halt die Mail vorher noch durch irgendeinen Filter jagen, damit die Umlaute korrekt rüberkommen. Ich dachte erst an formail, aber der scheint nichst in der Art mitzubringen. rotix schau ich mir mal an. Danke.
H.
On 22.11.03 Frank Benkstein (benkstein@math.tu-dresden.de) wrote:
On 21.11.03 Hilmar Preusse () wrote:
On 21.11.03 Andreas Kretschmer (kretschmer@kaufbach.delug.de) wrote:
Moin,
CF.: Ernyanzr rejüafpug
Mein einfaches:
# rot13 En-/Decoding macro pager \er "|formail -I ''|tr 'a-zA-Z' 'n-za-mN-ZA-M'|less\n"
in der .muttrc stellt leider das ü nicht korrekt dar. Kennt jemand eine bessere Lösung?
rotix?
- app-crypt/rotix
Das Problem an Andreas's Mail scheint in der PGP-Signierung zu bestehen. Dadurch zerfällt die Mail in zwei Teile und ich bräuchte erstmal etwas, was aus dem
Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable
plain text mit decodierten Umlauten macht. In der Man-page zu MIME::Decoder stand dazu was Passendes. Also sieht meine .muttrc jetzt so aus:
macro pager \er "|formail -I ''|qp-decode|tr 'a-zA-Z' 'n-za-mN-ZA-M'|less\n"
und scheint zu tun. qp-decode ist ein kleines Perlskript 1:1 aus MIME::Decoder(3pm) kopiert.
H.
Hilmar Preusse hille42@web.de writes:
# rot13 En-/Decoding macro pager \er "|formail -I ''|tr 'a-zA-Z' 'n-za-mN-ZA-M'|less\n"
in der .muttrc stellt leider das ü nicht korrekt dar. Kennt jemand eine bessere Lösung?
dein rot13-decoding is in Ordnung, aber du müsstest in diesem Fall erst Quoted-Printable dekodieren. bzw. base64 oder wie auch immer die Mail kodiert war.
mimencode ist hier ein startpunkt.
Gruss,
Stefan
Hallo,
da bin ich nochmal, und erstmal ein großes Dankeschön von mir an euch alle!
Es hat funktioniert, das Problem ist gelöst und gleichzeitig auf verschiedenen Wegen, da hab ich wieder mal echt was gelernt.
Also euch allen noch einen schönen Abend und nochmal Dank für die gute, und vor allem auch sehr schnelle Hilfe.
Friedrich, welchselbiger mit Nachnamen Preuß geheißen wird
On Fri, Nov 21, 2003 at 07:23:53PM +0100, phriedrich wrote:
Hallo,
ich bin neulich auf ein Problem gestoßen, welches ich allein noch nicht lösen konnte. Vielleicht könnt ihr mir ja helfen, es ist folgendes:
Wenn ich in einem Bash-Script eine Operation für mehrere Dateien ausführen will empfiehlt sich eine Konstruktion folgendes Typs:
for i in `ls <Verzeichnis>` do
<mache-irgendwas-mit-i> done
Entweder den IFS ändern, ist aber auch nicht das Allheilmittel, oder
find -maxdepth 1 -print0 | xargs -0 -1 ....
Heiko
lug-dd@mailman.schlittermann.de