On Fri, 2005-03-04 at 09:04 +0100, Heike C. Zimmerer wrote:

> Du hast den Kontext weggelassen.  Der war:
> 
> Du:
> | > Hmm? Alle Parameter werden in der jetzigen Version an gmplayer als
> | > ein Parameter Ãbergeben (in argv[1] resp $1, je nach Philosophie).
> 

Genau. Ich habe nicht gesagt, "\"[EMAIL PROTECTED]"" wÃrde als ein Parameter an
dchroot gehen, sondern am Ende des Aufrufstacks an gmplayer. Und das
habe ich gezeigt.

Mein Beispiel war 'script.sh a b' mit den zwei Parametern a und b.

> Ich:
> | NÃ. Da steht  "\"[EMAIL PROTECTED]"".
> | [..]
> | (Vor du jetzt antwortest "Sag' ich doch: einer", solltest du
> | evtl. nachschlagen.)
> 
> Du:
> | Ãberlass ich dir.
> 
> Also: *Alle Parameter* werden als *einer* Ãbergeben.  So deine
> Behauptung, und ich schrieb "nÃ".

Genau. Und dein 'nÃ' ist verkehrt.

> Nachzuschlagen wÃre `"$@"' gewesen.  Das hatte ich zitiert und mehr
> stand da ja nicht.  Im Unterschied zu `"$*"' expandiert das zu so
> vielen Parametern wie Ãbergeben wurden, fasst sie also *gerade nicht*
> zu einem einzigen zusammen.  Das ist ja genau der Witz, warum "$@"
> existiert und nicht nur "$*".

SchÃn und richtig, nur nicht relevant. Es geht nicht nur um die Shell
Syntax, sondern wie dchroot bzw. su seine Subshell aufruft. Teste z.B.
mal

 su - root /tmp/echo.sh \"a b\"   # zwei Paramater !

wo /tmp/echo.sh enthÃlt

 #!/bin/sh
 exec echo "$1"

und schau was dabei rauskommt.

Dieses Verhalten ist zwar nur halb oder gar nicht dokumentiert

 man su:

 ...
 Any arguments supplied after the username will be passed to the
 invoked  shell  (shell must support the -c command line option in
 order for a command to be passed to it).
 ...

aber eben da.

Und jetzt ein Wort zur Logik, warum all das auch ohne Analyse klar war.
Grundlage dafÃr war nÃmlich Carsten's Aussage es wÃrde mit "\"[EMAIL 
PROTECTED]""
gehen:

(1) die inneren Quotes in "\"[EMAIL PROTECTED]"" sind escaped und gehen daher 
in die
    dchroot Argumente

(2) die Quotes kommen aber nicht in den gmplayer Argumenten an, sonst
    wÃren sie Teil eines nicht exisitierenden Dateinamens

(3) sie werden also im Aufrufstack weginterpretiert, und zwar mit an
    Sicherheit grenzender Wahrscheinlichkeit paarweise und shellmÃssig,
    d.h. alles was zwischen ihnen steht wird als ein Wort/Parameter
    angesehen

(4) dieses Wort kÃnnte zwar weiter im Aufrufstack wieder auseinander-
    fallen, aber da an der Stelle wo die AnfÃhrungszeichen wegfallen
    keine gequoteten Leerzeichen mehr existieren wÃrde dann auch ein
    Dateiname mit Leerzeichen in Worte zerfallen. Carsten hatte aber
    wie gesagt eine Erfolgsmeldung gebracht. NatÃrlich fÃr Dateinamen
    mit Leerzeichen, denn darum handelte es sich.

Ergo, auch ohne grosse Analyse war die Sache klar, egal wie sehr man
sich an der bash man page festhÃlt.




-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

Antwort per Email an