On Mon, Apr 05, 2010 at 10:10:40AM +0200, Juergen Raschke wrote:
> Es mag sich vielleicht kleinkariert anhoeren, aber dein
> "escape"tes $$ liefert die pid der per sh geforkten shell
> nicht der dort darin aufgerufenen subshell "()".
> Das geht auch gar nicht mittels $$.
>
> Aus "man bash":
> $
> Expands to the process ID of the shell. In a () subshell, it
> expands to the process ID of the current shell, not the subshell.

Das ist aber kein spezielles PID problem sondern ein generisches Variable
expansion problem ... Wie ich ja im testcase auch gezeigt habe.

$$ wird sofort expanded d.h. die pid der calling d.h. parent shell
\$$ wird erst in der subshell expanded und damit zu pid der subshell.

\$$ ist fuer die shell keine variable sondern das \$ wird zu $ expanded
btw deescaped - dadurch wird das in DER shell nicht mehr bearbeitet sondern
so an die subshell durchgereicht die das dann expanden kann.

        $ echo $$ ; sh -c "echo $$ \$$ ; pstree -ph $$"
        8222
        8222 8983
        bash(8222)───sh(8983)───pstree(8984)

Dazu kommt noch das $BASHPID eben nicht POSIX ist und damit auf allem anderen
als bash auf die nase faellt... Z.b. bei aktuellem debian squeeze weil da die
default /bin/sh eine "dash" ist und keine "bash" mehr ...

Flo
-- 
Florian Lohoff                                                 [email protected]
"Es ist ein grobes Missverständnis und eine Fehlwahrnehmung, dem Staat
im Internet Zensur- und Überwachungsabsichten zu unterstellen."
- - Bundesminister Dr. Wolfgang Schäuble -- 10. Juli in Berlin 

Attachment: signature.asc
Description: Digital signature

--
Linux mailing list [email protected]
subscribe/unsubscribe: http://lug-owl.de/mailman/listinfo/linux
Hinweise zur Nutzung: http://www.lug-owl.de/Mailingliste/hints.epo

Antwort per Email an