Hallo, Am Fri, 17 Feb 2006, Al Bogner schrieb:
Am Freitag, 17. Februar 2006 20:15 schrieb David Haller: [..]
Zeig mal die Ausgabe von df -P "$AUTHORINGQUELLE", also hier
df -P /media_out_nfs/scripttest/
df -P /media_out_nfs/scripttest/ Dateisystem 1024-Blöcke Benutzt Verfügbar Kapazit. Eingehängt auf 192.168.1.100:/media_out 133105728 106916608 26189120 81% /media_out_nfs [..] # df -P /media_out_nfs/scripttest | awk '/^\//{print $4;}'
Da kommt nichts
Ah, das liegt daran, dass du ueber's Netz mountest und der Mountpunkt also nicht mit einem '/' sondern ner '1' beginnt. Folgendes muesste klappen: | awk '/^([0-9.]+:)?\//{print $4;}' Das matcht simpelst auf eine IP gefolgt von einem ':' und dann nem '/'. Ansonsten ist's evtl einfacher so zu machen: LANG="C" ## gleich am Anfang des scriptes, oder im `` vor df. FREI=`df -P "${AUTHORINGQUELLE}" \ | awk '! /^Filesystem/{printf "%i", $4 / 1048576; }'`
Mist. Zuviel gequoted. Testhalber mal so:
DVDWIZARDOPTION="$DVDWIZARDOPTION -t \"$FILMTITEL\" \"`basename $FILM`\""
/usr/local/bin/dvd_authoren_dh.sh_[axMjhb].sh: line 42: test: -lt: unary operator expected + dvdwizard -c 600 -T ''\''TEST' 'TITEL'\''' -t '"film1' 'scripttest"' '"film1_scripttest.mpg"' -t '"film2' 'scripttest"' '"film2_scripttest.mpg"' Specified input file TITEL' not found. Aborting
Hast du wirklich die '\"' auch um $FILMTITEL angegeben? Sieht eher danach aus, als haettest du da noch die '' gelassen ;) Ansonsten kannst du's mal ganz ohne "inneres" quoten versuchen, aber da kann's gut sein, dass es dann mit Titel / Dateinamen mit Leerzeichen nicht klappt. Du kannst auch noch IFS aendern. Aber s.u. es wird auf jeden Fall ne Quaelerei.
Ansonsten kann man sich bei der bash auch mit einem Array helfen, in das man die Argumente einzeln hineinstopft:
David, das soll ein 13-jähriges Mädchen verstehen. Ich bin schon sehr froh darüber, dass sie das ursprüngliche Script mit etwas Hilfe geschafft hat. Man darf auch nicht vergessen, dass sie das Script nicht aus Freude am Scripten schrieb, sondern weil sie sich damit das Erstellen einer DVD erleichtern will.
Ja, schon klar. Aber erstens war das script ja schon ziemlich gut und das mit dem Argumente stueckweise zusammenbasteln ist eben eines der vom Quoten her schwierigsten Dinge ueberhaupt... Schau dir nur mal an wie ich das auch nicht direkt hinbekomme! Und wie komplex das durch's 'set -x' Ausgegebene ist.
Auf die Array-Variante möchte ich erst dann zurück kommen, wenn es anders nicht klappt.
Ist einfacher und bei so einem Fall absolut angebracht. Kennt sie das Konzept "Array" schon? Naja, ich denke, das kannst du erklaeren ;) Ansonsten melde dich und/oder sag ihr, sie soll sich melden (per PM, s.u.).
Es ist mir wichtig, dass sie versteht, was da passiert, sonst wird sie bei nächster Gelegenheit nicht motiviert sein, da selber was zu schreiben. Es ist ihr 2. Shellscript.
ACK. Das mit diesem Quotingproblem zu verstehen geht halt leider nicht so einfach, da habe auch ich noch Probleme mit, das konkret bis ins Detail nachzuvollziehen -- und auch ich scheitere regelmaessig daran, kenne aber den Ausweg mit der Arrayvariablen... Es ist einfach eine Besonderheit, wenn man Argumente zusammenbasteln will, die man dann an einen aufzurufenden Befehl uebergibt. Glaube mir, nimm das mit dem Array, denn das kann man dann einfach und "korrekt" via "${arrayvar[@]}" uebergeben. Ohne Array ist es ne Quaelerei und funktioniert oft trotzdem nicht. Ansonsten gib' ihr erstmal ein dickes Lob fuer's gute Quoten weiter, in ihrer Version gab's nur ein paar Stellen, wo sie fuer schwierige[2] Faelle zu wenig gequoted hat. Und eben x="$foo""bar" Sachen, wo die "" in der Mitte ueberfluessig sind -- aber auch nicht schaden. Meine ersten Scripte waren wesentlich schlechter! Und mach ihr klar, dass sie am IMHO schwierigsten Problem beim shell-script schreiben "haengengeblieben" ist. Alle anderen Verbesserungen in meiner Version betreffen keine "Fehler" sondern sind eher Stil-[3] und/oder Effizienzfragen[4] und/oder beruecksichtigen zumindest teilweise schwierige Faelle wie [2]. Und ich erklaere ihr gerne meine Aenderungen, was hier aber OT waere. BTW: meine Erklaerungen / Aenderungen bisher waren eher auf dich als Vermittler gemuenzt, weniger direkt fuer sie. Ich kann auch anders ;) -dnh PS: du kannst ihr gern meine PM weitergeben, wenn sie Fragen hat, gerade was "warum so und nicht einfach ..." Fragen angeht... Ansonsten sind solche (weitere) (Detail-)Fragen in suse-programming generell besser aufgehoben. Ausserdem ist da wenig los und Jan Trippler scheint z.Z. suse-programming zu lesen... [2] Shell-Metazeichen im uebergebenen Pfad z.B. -- und diese bei uebergabe auch noch gequoted, also z.B. sowas: dvd_authoren.sh '*' '/blubb/*' [3] z.B. das 'test x || y'-Idiom statt 'if [ x ]; then y; fi' [4] z.B. dass awk selber greppen kann -- Bei Deiner alten SuSE war so ein rechteckiges Ding aus totem Baum dabei. Man nennt es Handbuch. [Stefan Tomaneck in de.comp.os.unix.linux]