Hallo, Am Sun, 24 Jul 2011, Al Bogner schrieb:
PS: Mal schauen, ob David was zu kritisieren hat ;-)
Aber immer. Schließlich ist exiftool ein perlscript. Ergo sollte man selber als Script ein Perlscript schreiben, und darin direkt Image::ExifTool verwenden. exiftool ist nur ein CLI (Command Line Interface) zu Image::ExifTool. Das sollte man nie vergessen. Man lese also 'perldoc Image::ExifTool'. Wenn man scriptet, und wenn man via exiftool sowieso Perl verwendet, dann sollte man gleich alles in perl erledigen. per ``, qx, open, system kann man immer noch alles mache wie in der shell, meist gibt's aber effektiveres in perl. BTW: wenn man system verwendet, immer schön den Exitstatus abfragen. Mein "Wrapper" schaut so aus: ==== my $dry_run ||= 0; ### zu setzen via -s oder Getopt::* sub runcmd { my $ret = 0; if( ! $dry_run ) { system(@_); $ret = $?; ### hier ggfs. Sonderlocken für z.B. mkvmerge, antivir einfügen if( $ret == -1 ) { print STDERR "failed to execute: $!\n"; } elsif ($ret & 127) { printf STDERR "\nchild died with signal %d, %s coredump\n", ($ret & 127), ($ret & 128) ? "with coredump" : ""; } } else { print "\n+ ", join(" ", @_), "\n"; } return $ret == 0; } ==== Man muß nur noch darauf achten, ob man system via runcmd einen String ('runcmd("foo bar baz")') oder [besser] ein Array verfüttert ('runcmd("foo", "bar", "baz").). Siehe dazu 'perldoc -f system': ==== system LIST system PROGRAM LIST [..] Note that argument processing varies depending on the number of arguments. If there is more than one argument in LIST, or if LIST is an array with more than one value, starts the program given by the first element of the list with arguments given by the rest of the list. If there is only one scalar argument, the argument is checked for shell metacharacters, and if there are any, the entire argument is passed to the system's command shell for parsing (this is "/bin/sh -c" on Unix platforms, but varies on other platforms). If there are no shell metacharacters in the argument, it is split into words and passed directly to "execvp", which is more efficient. ==== Ist also durchaus sicherheitsrelevant! Die "Array" Variante ist immer vorzuziehen. -dnh --
Like the man said: "Nothing good ever goes in /opt." -- T. W. Foreman s/\/opt/\// -- P. L. Basilisk -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org