I was running a Perl script that replaces a string with another:
perl -pi.back -e \'s/str1/str2/g;\' path/to/file1.txt
When I run this co
exec uses StringTokenizer to parse the command, which apparently just splits on whitespace.
Take for example the following shell command (similar but different than yours):
perl -pi.back -e 's/a/b/g; s/c/d/g;' path/to/file1.txt
For it, StringTokenizer produces the following command and arguments:
perl (command)-pi.back-e's/a/b/g;s/c/d/g;'path/to/file1.txtThat's completely wrong. The command and arguments should be
perl (command)-pi.back-es/a/b/g; s/c/d/g; (Note the lack of quotes.)path/to/file1.txtYou could pass those above to exec(String[] cmdarray). Or if you don't have the option of parsing the command, you could actually invoke a shell to parse it for you by passing the following to exec(String[] cmdarray):
sh (command)-cperl -pi.back -e 's/a/b/g; s/c/d/g;' path/to/file1.txt