我的代码的某个部分有一些问题。应该发生的是,Java 程序采用一些预先确定的变量并使用 UNIX 的“sed”函数来替换预先编写的 shell 脚本中的字符串“AAA”和“BBB”。我有三种方法可以做到这一点:一种使用“sed”替换文件中的字符串并将输出写入另一个文件;使用“rm”命令删除原始文件的一种;以及使用“mv”将输出文件重命名为原始文件的名称。shell 脚本在三个不同的目录中有三个副本,每个副本都应替换为它自己的特定变量。
替换应该发生在所有三个 shell 脚本文件中,但它只发生在两个。在第三个 shell 脚本上,似乎该过程没有完成,因为该文件的字节大小为 0。没有被替换的文件是完全随机的,所以不是同一个文件在每次运行期间都不起作用。
我不确定为什么会发生此错误。有没有人有任何可能的解决方案?这是代码:
public void modifyShellScript(String firstParam, String secondParam, int thirdParam, int fourthParam, String outfileDirectoryPath) throws IOException{
String thirdDammifParamString = "";
String fourthDammifParamString = "";
thirdDammifParamString = Integer.toString(thirdDammifParam);
fourthDammifParamString = Integer.toString(fourthDammifParam);
String[] cmdArray3 = {"/bin/tcsh","-c", "sed -e 's/AAA/"+firstDammifParam+"/' -e 's/BBB/"+secondDammifParam+"/' -e 's/C/"+thirdDammifParamString+"/' -e 's/D/"+fourthDammifParam+"/' "+outfileDirectoryPath+"runDammifScript.sh > "+outfileDirectoryPath+"runDammifScript.sh2"};
Process p;
p = Runtime.getRuntime().exec(cmdArray3);
}
public void removeOriginalShellScript(String outfileDirectoryPath) throws IOException{
String[] removeCmdArray = {"/bin/tcsh", "-c", "rm "+outfileDirectoryPath+"runDammifScript.sh"};
Process p1;
p1 = Runtime.getRuntime().exec(removeCmdArray);
}
public void reconvertOutputScript(String outfileDirectoryPath) throws IOException{
String[] reconvertCmdArray = {"/bin/tcsh","-c","mv "+outfileDirectoryPath+"runDammifScript.sh2 "+outfileDirectoryPath+"runDammifScript.sh"};
Process reconvert;
reconvert = Runtime.getRuntime().exec(reconvertCmdArray);
}