1 2 3 4 5
my @Result = `/opt/GetObjectLists.pl`, "service_url", $ConfigParams{Url}, "user_name", $ConfigParams{User}, "password", $ConfigParams{Password}, "viewtype", $ClientOption;
1 2 3 4 5 6 7 8
use Getopt::Long; Getopt::Long::Configure('no_ignore_case'); my %Opts = (); GetOptions( '--service_url=s' => \$Opts{service_url}, '--user_name=s' => \$Opts{user_name}, '--password=s' => \$Opts{password}, );
my @Result = qx{ skript.pl --opt1 "argument" --opt2 "argument" --opt3 "argument" ... };
2015-08-24T11:34:27 LinuxerIrgendwann sind Grenzen der einfachen Lösungen erreicht. Das Kommando, das zusammengebaut wird, wird an eine Shell zur Ausführung übergeben. Die Shell wertet Sonderzeichen aus, also musst Du die Sonderzeichen korrekt maskieren.
Mehr kann man schwer sagen, da Du die Details, wie Du es nun realisiert hast, für Dich behältst.
Vielleicht hilft Dir perlfunc quotemeta schon weiter?
Oder man überlegt sich einen anderen Weg, wie man die Daten aus dem ersten Skript in das zweite Skript bekommt.
perlipc zeigt da ein paar Wege auf.
Quotedie Fehlermeldung die ich bekomme ist: sh: 1: Syntax error: "(" unexpected
1 2 3 4 5 6 7 8 9 10
my @cmd = ( 'skript.pl', # Separator ',' is fine here, but using => to show relation between option and argument; '--opt1' => $argument1, '--opt2' => 'datastore1 (Raid5)', # argument to --opt2 has whitespace and special characters!!! ... );
1 2 3
open( my $pipe, '-|', @cmd ) or die "Could not call @cmd[0]: $!"; my @Result = <$pipe>; close $pipe;
2015-08-24T14:16:53 raboAlso sollte ich mir wohl eine Funktion bauen, die alle Sonderzeichen maskiert, wenn ich das richtig sehe.
1 2 3 4
use Capture::Tiny ':all'; ($stdout, $stderr, $exit) = capture { system("deine-executable", @argumente_die_nicht_gequotet_werden_muessen); };
1
2
$ perl -wE'open(my $fh, "-|", "/usr/bin/perl", "-wE", "say q{hallo Klammer auf: ) }" );print for <$fh>'
hallo Klammer auf: )