Dateinamen auf upper case bringen
![](https://seccdn.libravatar.org/avatar/c4f123eef9de088e3e848f248fb6cfec.jpg?s=120&d=mm&r=g)
Hallo Leute, ich habe ein wirklich selten dämliches Problem: In einem Verzeichnis befinden sich über 30000 Dateien. Die Dateinamen sind ALLE in Großbuchstaben. Das ist aber alles falsch, es müssen ausschliesslich Kleinbuchstaben sein. (Dateien wurden mit Windows-Client auf Netware-Server zwischengelagert, dabei ist das Malheur passiert, das Emoticon dazu spare ich mir und Euch, weil's inzwischen verboten ist...) Kennt jemand eine Möglichkeit, wie man sowas mit Bordmitteln (evtl. auch mit Windows, habe funktionierenden Samba) bewerkstelligen kann? Die man's zu rename und mv gaben keinen Hinweis. (Ich nutze SuSe 7.0, KDE2) Danke vorab! Bye, Rolf
![](https://seccdn.libravatar.org/avatar/b1542f21bd654f8e273b60c0140efe59.jpg?s=120&d=mm&r=g)
Hallo Rolf, On Wed, 31 Jan 2001, Rolf Scheurer wrote:
In einem Verzeichnis befinden sich über 30000 Dateien. Die Dateinamen sind ALLE in Großbuchstaben. Das ist aber alles falsch, es müssen ausschliesslich Kleinbuchstaben sein. (Dateien wurden mit Windows-Client auf Netware-Server zwischengelagert, dabei ist das Malheur passiert, das Emoticon dazu spare ich mir und Euch, weil's inzwischen verboten ist...)
...dann willst Du Deine Dateinamen im Gegensatz zu dem Subject dieser Email in "lower case" haben, oder?
Kennt jemand eine Möglichkeit, wie man sowas mit Bordmitteln (evtl. auch mit Windows, habe funktionierenden Samba) bewerkstelligen kann? Die man's zu rename und mv gaben keinen Hinweis.
Ich wuerde vielleicht Perl und die interne Funktion "lc $string" verwenden, die eine lower case Version des in $string gespeicherten Namens zurueckliefert. Das ganze kombiniert mit einem "mv"-Befehl sollte das gewuenschte eigentlich machen koennen.... (untested :-) Gruesse, Thomson -- Dipl.-Geophys. Thomas Hertweck Geophysikalisches Institut, Universitaet (TH) Karlsruhe Email: ubtj@rz.uni-karlsruhe.de Linux is like a wigwam - no windows, no gates, apache inside!
![](https://seccdn.libravatar.org/avatar/633b79060e151e276100d38ce8f733e2.jpg?s=120&d=mm&r=g)
Hi, On Wed, Jan 31 2001 at 21:28 +0000, Rolf Scheurer wrote:
In einem Verzeichnis befinden sich über 30000 Dateien. Die Dateinamen sind ALLE in Großbuchstaben. Das ist aber alles falsch, es müssen ausschliesslich Kleinbuchstaben sein. (Dateien wurden mit Windows-Client auf Netware-Server zwischengelagert, dabei ist das Malheur passiert, das Emoticon dazu spare ich mir und Euch, weil's inzwischen verboten ist...)
mmv "*" "#l1" sollte helfen (evtl. musst Du das Paket mmv nachinstallieren). Ciao, Stefan -- Stefan Troeger o _ _ _ stefan@troeger.st __o __o /\_ _ \\o (_)\__/o (_) _`\<, _`\<, _>(_) (_)/<_ \_| \ _|/' \/ (_)/(_) (_)/(_) (_) (_) (_) (_)' _\o_
![](https://seccdn.libravatar.org/avatar/c4f123eef9de088e3e848f248fb6cfec.jpg?s=120&d=mm&r=g)
Hallo Stefan, Am Mittwoch, 31. Januar 2001 21:07 schrieb Stefan Troeger:
Hi,
On Wed, Jan 31 2001 at 21:28 +0000, Rolf Scheurer wrote:
In einem Verzeichnis befinden sich über 30000 Dateien. Die Dateinamen sind ALLE in Großbuchstaben. Das ist aber alles falsch, es müssen ausschliesslich Kleinbuchstaben sein. (Dateien wurden mit Windows-Client auf Netware-Server zwischengelagert, dabei ist das Malheur passiert, das Emoticon dazu spare ich mir und Euch, weil's inzwischen verboten ist...)
mmv "*" "#l1"
danke für den Tip. Ich habe ich zwar im Subject vertan (Danke Thomson), vermute aber, dass Du mein Problem verstanden hast. Habe das Paket derzeit nicht installiert, vermute aber dass das kleine "L" für "lower case" steht. In der Hoffnung, dass das auch irgendwie rekursiv klappt werde ich das Paket morgen mal installieren und testen. Wenn's klappt knutsch' ich Dich bis Du schielst ;-) Bye, Rolf (Ich glaub', mir ist die leere Antwort schon mal rausgeflutscht, sorry an Alle)
sollte helfen (evtl. musst Du das Paket mmv nachinstallieren).
![](https://seccdn.libravatar.org/avatar/633b79060e151e276100d38ce8f733e2.jpg?s=120&d=mm&r=g)
Hi, On Wed, Jan 31 2001 at 22:24 +0000, Rolf Scheurer wrote:
Am Mittwoch, 31. Januar 2001 21:07 schrieb Stefan Troeger:
mmv "*" "#l1"
danke für den Tip. Ich habe ich zwar im Subject vertan (Danke Thomson), vermute aber, dass Du mein Problem verstanden hast. Habe das Paket derzeit nicht installiert, vermute aber dass das kleine "L" für "lower case" steht. In der Hoffnung, dass das auch irgendwie rekursiv klappt werde ich das Paket morgen mal installieren und testen.
Wenn's auch noch rekursiv sein soll, dann nimm mmv ";*" "#1#l2"
Wenn's klappt knutsch' ich Dich bis Du schielst ;-)
Rein virtuell hoffentlich ;-) Ciao, Stefan -- Stefan Troeger o _ _ _ stefan@troeger.st __o __o /\_ _ \\o (_)\__/o (_) _`\<, _`\<, _>(_) (_)/<_ \_| \ _|/' \/ (_)/(_) (_)/(_) (_) (_) (_) (_)' _\o_
![](https://seccdn.libravatar.org/avatar/861da56af9c996a6b55add75a8ec08e6.jpg?s=120&d=mm&r=g)
On Wed, 31 Jan 2001, Rolf Scheurer wrote:
Hallo Leute,
ich habe ein wirklich selten dämliches Problem:
In einem Verzeichnis befinden sich über 30000 Dateien. Die Dateinamen sind ALLE in Großbuchstaben. Das ist aber alles falsch, es müssen ausschliesslich Kleinbuchstaben sein. (Dateien wurden mit Windows-Client auf Netware-Server zwischengelagert, dabei ist das Malheur passiert, das Emoticon dazu spare ich mir und Euch, weil's inzwischen verboten ist...)
Kennt jemand eine Möglichkeit, wie man sowas mit Bordmitteln (evtl. auch mit Windows, habe funktionierenden Samba) bewerkstelligen kann? Die man's zu rename und mv gaben keinen Hinweis.
(Ich nutze SuSe 7.0, KDE2)
Danke vorab! wenn du mmv nicht nehmen willst, shell tuts auch:
for dn in * do dnn=`echo $dn | tr "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"` mv $dn $dnn done (geht sicher eleganter... und sorry for the long line) -- may the tux be with You! Joerg Thuemmler sysadmin@vordruckleitverlag.de
![](https://seccdn.libravatar.org/avatar/735ea797d876adb026ae955e8adbf597.jpg?s=120&d=mm&r=g)
On Don, Feb 01, 2001 at 08:36:23 +0100, Joerg Thuemmler wrote: [GROSS wird klein]
wenn du mmv nicht nehmen willst, shell tuts auch:
for dn in * do dnn=`echo $dn | tr "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"` mv $dn $dnn done
(geht sicher eleganter... und sorry for the long line)
Ärrks ;-) Um Himmelswillen! dnn=`echo $dn | tr '[:upper:]' '[:lower:]' dnn=`echo $dn | tr '[A-Z]' '[a-z]' Damit's rekursiv wird: for dn in `find . -type f -print`; do dnn=`dirname $dn`/`basename $dn | tr '[A-Z]' '[a-z]'` test "$dn" = "$dnn" || mv $dn $dnn done Jan
![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
SCRN! On Fre, 02 Feb 2001, Jan Trippler wrote:
On Don, Feb 01, 2001 at 08:36:23 +0100, Joerg Thuemmler wrote: Damit's rekursiv wird: for dn in `find . -type f -print`; do dnn=`dirname $dn`/`basename $dn | tr '[A-Z]' '[a-z]'` test "$dn" = "$dnn" || mv $dn $dnn done
Argl. Ich hasse Backticks. Die machen das so schnell unuebersichtlich! Besonders wenn's mehrstufig wird... \'`a '\'b\''`\' oder so. *g* for alt in $(find . -type f); do # -print ist default neu="$(dirname $alt)/$(basename $alt | tr '[A-Z]' '[a-z')" test "$alt" = "$neu" || mv "$alt" "$neu" done Wenn man gleichzeitig noch Leerzeichen durch _ ersetzen will kann man das prima mit einbauen: neu=" ... /$(basename ${alt// /_} | tr ...)" Und noch ein "Trick" (siehe 'man bash', nach '\$\{p' suchen), der zumindest in manchen Faellen funktioniert: $(basename $foo) = ${foo##*\/} $(dirname $foo) = ${foo%\/*} Wow (mussich mir merken): $ time for i in `seq 999`; do echo $(basename $f) >/dev/null; done real 0m10.623s $ time for i in `seq 999`; do echo ${f##*\/} > /dev/null; done real 0m0.170s $ time for i in `seq 999`; do echo $(dirname $f); done real 0m11.955s $ time for i in `seq 999`; do echo ${f%\/*}; done real 0m0.209s CU David, immer wieder begeistert vom der bash :) --
Blame directed at the wrong vendor tends to get reclassified as whining. No worries, I'm good at that too. -- Chris Hacking and Jay Mottern in asr
![](https://seccdn.libravatar.org/avatar/633c54285c7a57fd28b5120201c4109f.jpg?s=120&d=mm&r=g)
On Sat, 3 Feb 2001, David Haller wrote:
On Fre, 02 Feb 2001, Jan Trippler wrote:
On Don, Feb 01, 2001 at 08:36:23 +0100, Joerg Thuemmler wrote: Damit's rekursiv wird: for dn in `find . -type f -print`; do dnn=`dirname $dn`/`basename $dn | tr '[A-Z]' '[a-z]'` test "$dn" = "$dnn" || mv $dn $dnn done
[...]
for alt in $(find . -type f); do # -print ist default neu="$(dirname $alt)/$(basename $alt | tr '[A-Z]' '[a-z')" test "$alt" = "$neu" || mv "$alt" "$neu" done
Wenn man gleichzeitig noch Leerzeichen durch _ ersetzen will kann man das prima mit einbauen:
neu=" ... /$(basename ${alt// /_} | tr ...)"
Oder die Leerzeichen gleich in den obigen Ausdruck eingebaut. Bei mir demonstriert das folgender Befehl einwandfrei: find . -type f -exec echo {} \ | tr '[A-Z ]' '[a-z_]'
CU David, immer wieder begeistert vom der bash :)
Ja!!! Solche Konstruktionen an einem verschneiten Samstag Morgen sind eine wahre Wohltat! Gruss Peter Blancke -- Nachtwaechter ist der Wahnsinn, weil er wacht...
![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, On Sam, 03 Feb 2001, Peter Blancke wrote:
On Sat, 3 Feb 2001, David Haller wrote:
On Fre, 02 Feb 2001, Jan Trippler wrote:
On Don, Feb 01, 2001 at 08:36:23 +0100, Joerg Thuemmler wrote: Damit's rekursiv wird: for dn in `find . -type f -print`; do dnn=`dirname $dn`/`basename $dn | tr '[A-Z]' '[a-z]'` test "$dn" = "$dnn" || mv $dn $dnn done
[...]
for alt in $(find . -type f); do # -print ist default neu="$(dirname $alt)/$(basename $alt | tr '[A-Z]' '[a-z')" test "$alt" = "$neu" || mv "$alt" "$neu" done
Wenn man gleichzeitig noch Leerzeichen durch _ ersetzen will kann man das prima mit einbauen:
neu=" ... /$(basename ${alt// /_} | tr ...)"
Oder die Leerzeichen gleich in den obigen Ausdruck eingebaut. Bei mir demonstriert das folgender Befehl einwandfrei:
find . -type f -exec echo {} \ | tr '[A-Z ]' '[a-z_]' ^. Stuempt! :) `- da fehlt ein ';', scnr. Aber das '-exec echo' ist eh ueberfluessig. Ein "find . -type f | tr '[A-Z ]' '[a-z_]'" tut's auch.
CU David, immer wieder begeistert vom der bash :)
Ja!!! Solche Konstruktionen an einem verschneiten Samstag Morgen sind eine wahre Wohltat!
*g* Jup. 'man bash' als 'Gute Nacht'-Lektuere, dazu ein Bierchen als Schlummertrunk und Pink Floyd's "Atom Heart Mother" als Begleitmusik :) *räkel* *schnurr* David --
Was willst Du denn "tunen"? Wahrscheinlich Platten tieferlegen, Prozessorspoiler montieren, die Leiterbahnen im DRAM aufbohren, einen verchromten Prozessorlüfter anbringen, Fuchsschwanz am PCI-Bus, einen Doppelvergaser auf der Grafikkarte installieren und einen Turbolader für die Netzwerkkarte installieren. [Florian Weimer und Ralph Angenendt in dcoum]
![](https://seccdn.libravatar.org/avatar/8576ac1b72af7a8d7391dbaa48c37e65.jpg?s=120&d=mm&r=g)
David Haller wrote:
SCRN!
On Fre, 02 Feb 2001, Jan Trippler wrote:
On Don, Feb 01, 2001 at 08:36:23 +0100, Joerg Thuemmler wrote: Damit's rekursiv wird: for dn in `find . -type f -print`; do dnn=`dirname $dn`/`basename $dn | tr '[A-Z]' '[a-z]'` test "$dn" = "$dnn" || mv $dn $dnn done
Argl. Ich hasse Backticks. Die machen das so schnell unuebersichtlich! Besonders wenn's mehrstufig wird... \'`a '\'b\''`\' oder so. *g*
for alt in $(find . -type f); do # -print ist default neu="$(dirname $alt)/$(basename $alt | tr '[A-Z]' '[a-z')" test "$alt" = "$neu" || mv "$alt" "$neu" done [div. Bash-Scripte]
Argl, ich hasse nicht portable Bash-Scripte am Samstagmorgen, die mit Bourneshell-Skripten nur noch am Rande zu tun haben. :)
David, immer wieder begeistert vom der bash :) Man merkt's :)
Im Gegensatz zum ersten, sehr sauberen Lösungsvorschlag, sind deine Vorschläge hochgradig unportabel, da sie auf bash-proprietären Features basieren. Ralf
![](https://seccdn.libravatar.org/avatar/735ea797d876adb026ae955e8adbf597.jpg?s=120&d=mm&r=g)
On Sam, Feb 03, 2001 at 10:07:18 +0100, Ralf Corsepius wrote:
David Haller wrote: [bash only scripts] Argl, ich hasse nicht portable Bash-Scripte am Samstagmorgen, die mit Bourneshell-Skripten nur noch am Rande zu tun haben. :)
David, immer wieder begeistert vom der bash :) Man merkt's :)
Im Gegensatz zum ersten, sehr sauberen Lösungsvorschlag, sind deine Vorschläge hochgradig unportabel, da sie auf bash-proprietären Features basieren.
Danke *g* Das ist immer wieder der Grund, warum ich statt $() die `` benutze. Aber wenn man nicht auf Portabilität angewiesen ist, dann ist Davids Lösung natürlich genauso anwendbar (und schneller, da keine externen Kommandos, sondern nur bash-Interna genutzt werden). Man darf sich nur nicht wundern, wenn's auf einem anderen System nicht mehr klappt. Es zeigt sich also wieder mal: 1. Es gibt immer mehrere Lösungswege 2. Persönlicher Geschmack spielt eine große Rolle 3. Die vorzuziehende Lösung richtet sich immer nach den Schwerpunkten, die man setzt (Portabilität vs. Performance z. B.) 4. Ich finde es immer wieder schick, wenn für ein Problem mehrere Lösungswege eintrudeln, das hält den Blick offen ;-) Amen Jan
![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, On Sam, 03 Feb 2001, Jan Trippler wrote:
On Sam, Feb 03, 2001 at 10:07:18 +0100, Ralf Corsepius wrote:
David Haller wrote: [bash only scripts] Argl, ich hasse nicht portable Bash-Scripte am Samstagmorgen, die mit Bourneshell-Skripten nur noch am Rande zu tun haben. :)
Besser als verkorkste DOS-Batches/WSH-Scripts an einem verregneten Montagmorgen, oder? Ich schreib ja auch immer schoen brav '#!/bin/bash' in die erste Zeile.
David, immer wieder begeistert vom der bash :) Man merkt's :)
*g*
Im Gegensatz zum ersten, sehr sauberen Lösungsvorschlag, sind deine Vorschläge hochgradig unportabel, da sie auf bash-proprietären Features basieren.
Ist denn die Bash selbst nicht portabel? (scnr) s/proprietären/spezifischen/ Die csh und zsh und was weiss ich fuer welche Shells habe sicher aehnliche Features.
Das ist immer wieder der Grund, warum ich statt $() die `` benutze. Aber wenn man nicht auf Portabilität angewiesen ist, dann ist Davids Lösung natürlich genauso anwendbar (und schneller, da keine externen Kommandos, sondern nur bash-Interna genutzt werden). Man darf sich nur nicht wundern, wenn's auf einem anderen System nicht mehr klappt.
Ack! Ich versuche grad das portablen, aber nervig langsamen 'mktexpk' (und darin verwendete) sh-Scripte in (wohl unportable aber deutlich schnellere) bash-Scripte umzuscheiben... Gar nicht so einfach, das [1].
Es zeigt sich also wieder mal: 1. Es gibt immer mehrere Lösungswege 2. Persönlicher Geschmack spielt eine große Rolle 3. Die vorzuziehende Lösung richtet sich immer nach den Schwerpunkten, die man setzt (Portabilität vs. Performance z. B.) 4. Ich finde es immer wieder schick, wenn für ein Problem mehrere Lösungswege eintrudeln, das hält den Blick offen ;-)
Amen
*unterschreib* Bes. 4. Dann hat man mehr Auswahl um das fuer den jew. am beste geeignete zu finden. ;) CU David [1] Faengt mit den Optionen an: FOO="${1//--foo/}" statt FOO=`echo $1 | sed 's/--foo//'` ist deutlich schneller. Apropos: beim hier installierten 'tetex-1.0.7-17' von SuSE 6.4 ist ein Dreher drin (Zeile 43): --mag=*) MAG=`echo "$1" | sed '/s--mag=//'`; shift;; ebenso in tetex-1.0.6 von der SuSE 6.2. Muss mal schauen, ob's den immer noch gibt... Tja, bei sowas findet man Bugs ;) --
Von Euch laß ich mich nirgendwo hinführen! Das machen wir ganz unauffällig, das merkst Du garnicht. Warts ab, eines Tages bist Du der größte sig-Lieferant im Usenet und weißt garnichts davon. [Moss und C. Mueller in suse-talk]
![](https://seccdn.libravatar.org/avatar/8576ac1b72af7a8d7391dbaa48c37e65.jpg?s=120&d=mm&r=g)
David Haller wrote:
Hallo,
On Sam, 03 Feb 2001, Jan Trippler wrote:
On Sam, Feb 03, 2001 at 10:07:18 +0100, Ralf Corsepius wrote:
David Haller wrote: [bash only scripts] Argl, ich hasse nicht portable Bash-Scripte am Samstagmorgen, die mit Bourneshell-Skripten nur noch am Rande zu tun haben. :)
Besser als verkorkste DOS-Batches/WSH-Scripts an einem verregneten Montagmorgen, oder?
Jep.
Ich schreib ja auch immer schoen brav '#!/bin/bash' in die erste Zeile. In einem heterogenen Netzwerk kann man sich nicht darauf verlassen, dass die Bash überhaupt vorhanden ist, und wenn ja, wo sie liegt. Auf Nicht GNU-basierten Systemen wird sie in der Regel dort nicht zu finden sein, wenn überhaupt, dann unter /usr/bin, /usr/local/bin, /opt/bin oder ganz wo anders :)
David, immer wieder begeistert vom der bash :) Man merkt's :)
*g*
Im Gegensatz zum ersten, sehr sauberen Lösungsvorschlag, sind deine Vorschläge hochgradig unportabel, da sie auf bash-proprietären Features basieren.
Ist denn die Bash selbst nicht portabel? (scnr)
Weitgehend, aber * Es gibt tatsächlich Systeme, da lässt sie sich nicht übersetzen. * Sie ist schlichtweg zu gross/langsam (Beispiel: Unter Cygwin kommt deshalb die ash als /bin/sh zum Einsatz) * Sie war in der Vergangenheit als nicht übermässig stabil und sicher bekannt (und wird deshalb von vielen Sysadmins nicht systemweit installiert).
s/proprietären/spezifischen/ Die csh und zsh und was weiss ich fuer welche Shells habe sicher aehnliche Features. Ja, klar. Es spricht auch nichts dagegen, diese Features local, für den persönlichen Gebrauch oder für ein bestimmtes System auszunutzen. Nur sollte man sich im klaren sein, das die bash unter fast allen Linux-Systemen als /bin/sh verwendet wird, es sich bei /bin/sh im Allgemeinen aber nicht um die bash handelt.
Das ist immer wieder der Grund, warum ich statt $() die `` benutze. Aber wenn man nicht auf Portabilität angewiesen ist, dann ist Davids Lösung natürlich genauso anwendbar (und schneller, da keine externen Kommandos, sondern nur bash-Interna genutzt werden). Man darf sich nur nicht wundern, wenn's auf einem anderen System nicht mehr klappt.
Ack! Ich versuche grad das portablen, aber nervig langsamen 'mktexpk' (und darin verwendete) sh-Scripte in (wohl unportable aber deutlich schnellere) bash-Scripte umzuscheiben... Der Aufwand rentiert sich meiner Meinung nach nicht, da der Zeitaufwand für die unterlagerten Tools den Zeitaufwand der Shell um mehrere Großenordnungen übersteigt.
Anstatt auf die Bash zu setzen würde ich dann gleich eine richtige Scriptsprache verwenden (z.B. perl, python o.ä.). Die sind auf keinen Fall überall installiert, und wenn doch, dann deutlich portabler und ähnlich schnell wie Bash-Skripte.
Gar nicht so einfach, das [1].
Tja, schau dir mal die autoconf Quellen und die autoconf Doku im Detail an. Sie stecken voller Tricks und Hinweise auf portable Shellprogrammierung :)
Es zeigt sich also wieder mal: 1. Es gibt immer mehrere Lösungswege 2. Persönlicher Geschmack spielt eine große Rolle 3. Die vorzuziehende Lösung richtet sich immer nach den Schwerpunkten, die man setzt (Portabilität vs. Performance z. B.) 4. Ich finde es immer wieder schick, wenn für ein Problem mehrere Lösungswege eintrudeln, das hält den Blick offen ;-) Weitgehendes ACK.
Der aus meiner Sicht entscheidende Punkt steckt in 3. versteckt: Es kommt darauf an, welche Anwendung man zum Ziel hat. Es gibt Anwendungen da sind bash Scripte OK (z.B. Linux-Bootscripte, oder zum persönlichen Gebrauch unter Linux), in anderen Fällen nicht (configure, generel anwendbare Skripte). Wenn es um Portablität geht, gibt es bessere Mittel als die Bash, IMHO. Ralf
![](https://seccdn.libravatar.org/avatar/f67104496850bd7582029d629b375525.jpg?s=120&d=mm&r=g)
On Sat, 3 Feb 2001, David Haller wrote:
Ist denn die Bash selbst nicht portabel? (scnr)
Die ist ziemlich portabel - ich hab' sie bereits unter DOS mit djgpp, unter hp-ux 7.0 mit dem eingebauten HP-Compiler, unter NetBSD und natuer- lich unter Linux uebersetzt und benutzt. (scnr2)
s/proprietären/spezifischen/ Die csh und zsh und was weiss ich fuer welche Shells habe sicher aehnliche Features.
Die csh ist fuer die bash das, was die sh fuer die tcsh ist. Nein. Die sh ist fuer die csh, was fuer bash tcsh ... Nein. Die bash ist fuer sh csh tsch zischhh ... *grmpf* Jedenfalls ist die zsh die Obermenge davon.
3. Die vorzuziehende Lösung richtet sich immer nach den Schwerpunkten, die man setzt (Portabilität vs. Performance z. B.)
... und nach der zur Verfuegung stehenden Bearbeitungszeit. Volker ----------- X-Mailed + reply-to-setted to: suse-talk@flinux.in-berlin.de Zum Eintragen in die Liste bitte folgende Kommandozeile benutzen: echo "subscribe suse-talk" | mail majordomo@flinux.in-berlin.de ----------- -- #define QUESTION ((bb) || !(bb)); // Shakespeare
![](https://seccdn.libravatar.org/avatar/91258aa3ce703520a02a4c8aef955eb4.jpg?s=120&d=mm&r=g)
On 04-Feb-01 Volker Mueller wrote:
Die csh ist fuer die bash das, was die sh fuer die tcsh ist. Nein. Die sh ist fuer die csh, was fuer bash tcsh ... Nein. Die bash ist fuer sh csh tsch zischhh ... *grmpf* Jedenfalls ist die zsh die Obermenge davon.
Ich glaube, hier muß man mal ein bisschen was erklären :-). Es gibt historisch 2 wichtige Shell-Familien (im Prinzip kann man auch perl oder mc als Shell benutzen wenn man will, aber das ist eher eine exotische Konfiguration) Die eine Familie ist die bourne-/Korn-Shell-Linie sh / ksh / bash In der Reihenfolge sind die Dinger auch ziemlich weitgehend abwärtskompatibel und haben eine ähnliche Syntax. Daneben gibts die Linie, die von der C-Shell (csh) abstammt, hier ist der wichtigste Vertreter die tcsh. Die jeweils "aktuellen" Vertreter mit großer Verbreitung sind bash und tcsh, die vom Funktionsumfang her ungefähr gleich mächtig sein dürften. Traditionell benutzen Systeme aus dem BSD-Stammbaum (z.B. OpenBSD) als Standard-Shell oft einen Abkömmling der csh-Linie, Systeme aus der System V Linie (z.B. Tru64) eher einen Abkömmling der sh/ksh-Linie. Beide Shell-Linien unterscheiden sich vor Allem durch die Syntax. Die csh spricht traditionell eher die Programmierer an, während die ksh von der Philosophie her mehr den Anwender im Visier hat, allerdings sind diese Ausrichtungen heute schon stark verwischt. Daneben gibts noch ne ganze Latte nicht so verbreiteter Shells, die sich zum Teil auch an speziellere Zielgruppen richten. Zum Beispiel ash. Und die zsh als Versuch, einen weiteren Schritt zu setzen, hat sich aber auch noch nicht auf breitester Ebene etabliert. -- Erhard Schwenk http://www.fto.de - http://www.akkordeonjugend.de No Spam replies please.
![](https://seccdn.libravatar.org/avatar/8576ac1b72af7a8d7391dbaa48c37e65.jpg?s=120&d=mm&r=g)
Volker Mueller wrote:
On Sat, 3 Feb 2001, David Haller wrote:
Ist denn die Bash selbst nicht portabel? (scnr)
Die ist ziemlich portabel - ich hab' sie bereits unter DOS mit djgpp, unter hp-ux 7.0 mit dem eingebauten HP-Compiler, unter NetBSD und natuer- lich unter Linux uebersetzt und benutzt. (scnr2)
* Versuch's doch mal auf schwachbrüstiger Hardware, veralteten OSen oder langsamen OS-Emulationen (Cygwin) .. (SCNR 3) * Die unterschiedliche Bashversionen sind nicht einmal zu sich selbst kompatibel (SCNR 4). Einige Linux-Distris setzen deshalb immer noch als Default-Shell die bash-1.x ein. Ausserdem besitzt die Bash-2.X sehr viele (Übersetzungs- und Laufzeit-) Optionen, die ihr Verhalten grundlegend verändern. Setzt man darauf basierende Scripte ein, hat man sehr schnell ein Problem auf unterschiedlichen Installationen. [Selbst SuSE hat lange Zeit nachdem die bash-2.x heraus war noch die Bash-1.x verwendet, da ihre eigenen bash-1.x Scripte mit der bash-2.x Probleme hatten (und umgekehrt), von den Stabiltätsproblemen früher bash-2.x Versionen mal ganz zu schweigen.] Ralf
participants (10)
-
David Haller
-
Erhard Schwenk
-
Jan.Trippler@t-online.de
-
Joerg Thuemmler
-
Peter Blancke
-
Ralf Corsepius
-
Rolf Scheurer
-
Stefan Troeger
-
Thomas Hertweck
-
Volker Mueller