[Cologne-pm] script auf mehreren CPU's starten

Michael Lamertz mike at lamertz.net
Fri Nov 11 12:04:28 PST 2005


Tsk, tsk, tsk, Aristoteles, hattest Du eine schlaflose Nacht, oder hast
Du meinen Post einfach nicht gelesen?  ;-)

On Fri, Nov 11, 2005 at 05:20:08PM +0100, A. Pagaltzis wrote:
> * Michael Lamertz <mike at lamertz.net> [2005-11-11 10:35]:
> > Also, 'tar => 1,2,3' macht nix anderes, als Dir eine Liste
> > ('tar', 1, 2, 3) zu erzeugen.
> 
> Ja, oder um es anders zu sagen, der `=>` ist nichts anderes als
> ein Komma, das es einem erspart, wenn man auf der linken Seite
> einen sehr einfach String hat, ihn in Anführungszeichen zu
> setzen. (Der String darf nur Buchstaben, Ziffern und Unterstriche
> enthalten.)

Das hatte ich exakt einen Absatz ueber der von Dir gequoteten Zeile auch
beschrieben:

$self wrote direkt darueber:
>  Erschreckt Dich der => Operator?
>
>      ---------- perldoc perlop ----------
>      The "=>" operator is a synonym for the comma, but forces any word
>      (consisting entirely of word charac- ters) to its left to be
>      interpreted as a string (as of 5.001).  If the argument on the left
>      is not a word, it is first interpreted as an expression, and then
>      the string value of that is used.
>      ---------- perldoc perlop ----------

> > Btw.: Wusstet Ihr, dass $0 bei Perl von aussen anscheinend
> > nicht ueberschrieben werden kann?
> 
> Jepp. Aus `perldoc perlvar`:
> 
>    (docs snipped)
> 
> M.a.W., das Verändern von $0 ist extrem plattformspezifisch und
> daher keine besonders gute Angewohnheit.

Irrtum.  Das bezieht sich auf die Veraenderung von $0 durch das laufende Script
selber, wie es z.B. screen auch macht.  Im ps wird dann naemlich SCREEN
angezeigt.

    ---------- fake.pl ----------
    #!/usr/bin/perl

    $0 = 'FAKED';
    sleep 30;
    ---------- fake.pl ----------

und

    ---------- snip ----------
    nijushiho:~$ ./fake.pl &
    [1] 4993
    nijushiho:~$ ps -aef | grep 4993
    mlamertz  4993  4948  0 20:47 pts/2    00:00:00 FAKED
    mlamertz  4995  4948  0 20:47 pts/2    00:00:00 grep 4993
    nijushiho:~$ 
    ---------- snip ----------

Das Vorgaukeln des falschen Namens von aussen ist durchaus nicht unueblich.
Ein allseits bekanntes Beispiel ist z.B. gzip/gunzip:

    ---------- snip ----------
    nijushiho:~$ ls -li /bin/gzip /bin/gunzip
    3620878 -rwxr-xr-x  4 root root 53676 Jul 11 22:18 /bin/gunzip*
    3620878 -rwxr-xr-x  4 root root 53676 Jul 11 22:18 /bin/gzip*
    nijushiho:~$ 
    ---------- snip ----------

See you datt?  Ist dasselbe Programm.  Benutzt Du nun das 'call'-Script
von meiner Mail heute Mittag, dann kannst Du damit aus gzip ganz einfach
gunzip machen, und das Programm reagiert entsprechend auf die Aenderung:

    ---------- snip ----------
    tweety:~$ ./call gzip gunzip --help
    gunzip 1.3.5
    (2002-09-30)
    usage: gunzip [-cdfhlLnNrtvV19] [-S suffix] [file ...]
     -c --stdout      write on standard output, keep original files unchanged
     -d --decompress  decompress
     -f --force       force overwrite of output file and compress links
     -h --help        give this help
     -l --list        list compressed file contents
     -L --license     display software license
     -n --no-name     do not save or restore the original name and time stamp
     -N --name        save or restore the original name and time stamp
     -q --quiet       suppress all warnings
     -r --recursive   operate recursively on directories
     -S .suf  --suffix .suf     use suffix .suf on compressed files
     -t --test        test compressed file integrity
     -v --verbose     verbose mode
     -V --version     display version number
     -1 --fast        compress faster
     -9 --best        compress better
        --rsyncable   Make rsync-friendly archive
     file...          files to (de)compress. If none given, use standard input.
    Report bugs to <bug-gzip at gnu.org>.
    tweety:~$ 
    ---------- snip ----------

Und so wie's aussieht (nochmal, siehe Mail von vorhin), geht das bei Perl
irgendwie nicht, da der Fake-Name eben nicht angezeigt wird.  Ich hab's gerade
bei 'nem Shell-Script ausprobiert, und da funktioniert's auch nicht.
Haengt wohl damit zusammen, dass die #!-Zeile ja erst noch den
Interpreter dazwischen schaltet.

Wieder 'was gelernt...

-- 
	    Well, then let's give that Java-Wussie a beating... (me)

Michael Lamertz                        |     +49 2234 204947 / +49 171 6900 310
Sandstr. 122                           |                       mike at lamertz.net
50226 Frechen                          |                 http://www.lamertz.net
Germany                                |               http://www.perl-ronin.de 


More information about the Cologne-pm mailing list