Perl-Skript wird im Terminal ausgeführt, jedoch nicht, wenn es vom Java-Programm aus aufgerufen wird

Ich habe ein Perl-Skript ausgeführt, das eine Zeichenfolge durch eine andere ersetzt:

perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt

Wenn ich diesen Befehl über das Terminal ausführe, ersetzt er alle Vorkommen vonstr1 in der angegebenen Datei anstr2. Wenn ich das von Java aus starte, greift es auf die Datei zu, aber es findet kein Ersatz statt:

Runtime.getRuntime().exec("perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt");
Ich bin sicher, es greift auf die Datei zu (die Datei scheint in gedit bearbeitet worden zu sein (erneutes Laden erforderlich)).Ich habe Java ausprobiertProcessBuilder Klasse, aber das gleiche Ergebnis passiert.Wenn ich benutzeRuntime.exec() oderProcessBuilder mit anderen Befehlen (wiegedit newFile.txt) Sie funktionieren gut.Ironischerweise habe ich den obigen Perl-Befehl aus Java gedruckt und das Einfügen in das Terminal übernommen, und der Ersetzungsvorgang ist abgeschlossen!Keine Ausnahmen oder Fehler bei Verwendung dieser Befehle. (Ich habe versucht zu fangen, um dies sicherzustellen).Ich habe auch verwendet/usr/bin/perl anstattperl im cmd, um sicherzustellen, dass der perl cmd ausgeführt wird.

Was denkst du, ist das Problem?

BEARBEITEN:

Ich habe dieses Problem gelöst, indem ich einfach die Anführungszeichen aus dem Befehl in Java entfernt habe. Vielen Dank an @ikegami für die Hilfe. Die Arbeitsversion ist also:

perl -pi.back -e s/str1/str2/g; path/to/file1.txt

anstatt

perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt

Antworten auf die Frage(1)

Ihre Antwort auf die Frage