У меня возникли проблемы с определенным сегментом моего кода. Предполагается, что программа Java принимает некоторые предопределенные переменные и использует функцию «sed» UNIX для замены строк «AAA» и «BBB» в предварительно написанном сценарии оболочки. У меня есть три метода для этого: один, который заменяет строки в файле с помощью команды «sed» и записывает вывод в другой файл; тот, который удаляет исходный файл с помощью команды «rm»; и тот, который переименовывает выходной файл в имя исходного файла с помощью «mv». Есть три копии сценария оболочки в трех разных каталогах, и каждый из них должен быть заменен его собственными конкретными переменными.Пустой выходной файл генерируется при запуске Java-процесса
Замена должна произойти для всех трех файлов сценариев оболочки, но это происходит только для двоих. В третьем скрипте оболочки кажется, что процесс не завершился, так как размер байта этого файла равен 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);
}
Почему бы просто не использовать Java для замены строки вместо sed? – rob
Функциональность UNIX, похоже, намного лучше работает с разбором файлов. Кроме того, я не хотел иметь дело с чтением из файла, находя конкретную последовательность CHAR «AAA» и заменяя ее. Это хорошая идея, без сомнения, но у меня осталось еще три часа, чтобы закончить этот скрипт, и эта проблема только что произошла. –