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