Thread Systemaufruf mit backticks und Parameterübergabe (10 answers)
Opened by rabo at 2015-08-17 15:36

Linuxer
 2015-08-24 16:36
#181895 #181895
User since
2006-01-27
3872 Artikel
HausmeisterIn

user image
edit
Es ist so wie befürchtet.

Quote
die Fehlermeldung die ich bekomme ist: sh: 1: Syntax error: "(" unexpected


Wie zu sehen ist, meldet sich eine Shell (Shell "sh", Zeile "1"), die pflichtgemäß die "Eingabe" überprüft. Und die unmaskierte Klammer ist an der Stelle eben falsch.

Wenn Du "bla (blub)" als String übergeben willst, musst Du das eben auch so tun und den String als solchen für die Shell kenntlich machen.
Nicht: --option bla (blub), sondern --option "bla (blubb)". Beachte die "".

Aber am besten nutzt Du Raubtiers Vorschlag mit dem open(). Damit kannst Du Dir das Quoting sparen, weil es den Shellaufruf spart.

So kannst Du zuerst ein Array mit dem Kommando und seinen Argumenten zusammenbauen. Achte darauf, dass die Strings, die als Argument zu einer Option gehören, eben auch als String definiert werden.
/edit

Code (perl): (dl )
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!!!

  ...
);


Danach machst Du den Aufruf des open und list die Ausgabe aus dem Handle:

Code (perl): (dl )
1
2
3
open( my $pipe, '-|', @cmd ) or die "Could not call @cmd[0]: $!";
my @Result = <$pipe>;
close $pipe;


edit2: fixed typo, added shell hint
Last edited: 2015-08-24 17:08:00 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Systemaufruf mit backticks und Parameterübergabe