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中编辑(需要重新加载)). 那么您认为问题是什么? 编辑: 我通过从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 解决方法
exec使用StringTokenizer来解析命令,这显然只是在空格上分割.
以下面的shell命令为例(类似但不同于你的命令): perl -pi.back -e 's/a/b/g; s/c/d/g;' path/to/file1.txt 为此,StringTokenizer生成以下命令和参数: > perl(命令) 那是完全错误的.命令和参数应该是 > perl(命令) 你可以将上面的那些传递给exec(String [] cmdarray).或者,如果您没有解析命令的选项,您实际上可以通过将以下内容传递给exec(String [] cmdarray)来调用shell来为您解析它: > sh(命令)> -c> perl -pi.back -e’s / a / b / g; S / C / d /克;”路径/到/ FILE1.TXT (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |