Perl-скрипт запускается в терминале, но не запускается при вызове из Java-программы
Я запустил Perl-скрипт, который заменяет строку на другую:
perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt
Когда я запускаю эту команду из терминала, она хорошо заменяет все вхожденияstr1
в данном файлеstr2
, Когда я запускаю это из Java, он получает доступ к файлу, но замена не происходит:
Runtime.getRuntime().exec("perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt");
Я уверен, что он обращается к файлу (файл, кажется, отредактирован в gedit (требуется перезагрузка)).Я пробовал JavaProcessBuilder
класс, но тот же результат происходит.Когда я используюRuntime.exec()
или жеProcessBuilder
с другими командами (например,gedit newFile.txt
) они хорошо работаютПо иронии судьбы, я распечатал вышеупомянутую команду perl из java, взял пасту в терминале и операция замены завершена!Нет исключений или ошибок при использовании этих команд. (Я использовал попробовать и поймать, чтобы убедиться в этом).Я также использовал/usr/bin/perl
вместоperl
в cmd, чтобы гарантировать выполнение perl cmd.Так в чем проблема?
РЕДАКТИРОВАТЬ:
Я решил эту проблему, просто удалив кавычки из команды в Java. Спасибо @ikegami за помощь. Итак, рабочая версия:
perl -pi.back -e s/str1/str2/g; path/to/file1.txt
вместо
perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt