[Vienna-pm] Escapen von Shellparametern

Gerfried Fuchs alfie at ist.org
Mon Apr 28 07:16:32 PDT 2008


Am Montag, den 28.04.2008, 15:34 +0200 schrieb Stefan Weiss:
> Soweit ich das gesehen habe, ist die gängige Meinung im Usenet und in 
> den Messageboards, dass ein verläßliches Escapen von Parametern, die der 
> Shell übergeben werden (mit system() oder Backticks oä) sehr komplex bis 
> kaum möglich ist. Leider ist es nicht immer (einfach) möglich, system() 
> mit einer Liste von Parametern zu verwenden, und das Escapen Perl zu 
> überlassen.
> 
> Zum Beispiel in diesem Fall:
> 
> my $cmd = "faxjob --from $from --faxnum $num (usw)";
> print LOG "$cmd\n";
> my $result = `$cmd`;

 Witzig, ich hab auch etwas mit faxen in perl geschrieben. Aber: es gibt
doch genau dafür quotemeta():

#v+
my $cmd = "faxjob --from ".quotemeta($from)
           ." --faxnum ".quotemeta($num)
           ." (usw)";
#v-

> Ich verwende jetzt stattdessen diese Funktion, um Dinge wie $from und 
> $num zu escapen:
> 
> sub esc {
>       local $_ = shift;
>       s#([^\w./+-])#\\$1#g;
>       return $_;
> }

 Siehe oben, die Funktion genau dafür gibt's bereits. ;)

 Bis dann,
Rhonda



More information about the Vienna-pm mailing list