Я пытаюсь запустить скрипт Bash, чтобы сравнить два файла, чтобы увидеть, идентичны ли они (за исключением последних нескольких строк). Сценарий, который я написал, работает нормально, когда я запускаю его вручную, однако, потому что я хочу, чтобы скрипт запускался сразу после программы java, я сделал так, чтобы программа java запускала сценарий после того, как она сделала все остальное, но когда это происходит, я получаю синтаксическую ошибку.
Может кто-нибудь объяснить, почему это происходит, когда я запускаю скрипт bash из программы java и как я мог это исправить.
fileChangeCheck. sh
#!/bin/bash
if [[ -f output/newfile.json ]]
then
echo "File found"
errorTest=$(tail -n 1 output/newfile.json)
if [[ $errortest=} ]]
then
diff <(head -n -3 output/current.json) <(head -n -3 output/newfile.json) > output/check.txt
if [[ -s output/check.txt ]]
then
echo "$(date "+%d-%m-%Y %H:%M:%S") - Check had Data" >> logs/log.txt
mv output/current.json output/archive/current.$(date "+%Y%m%d%H%M%S").json
mv output/newfile.json output/current.json
rm output/check.txt
else
echo "$(date "+%d-%m-%Y %H:%M:%S") - Check was empty" >> logs/log.txt
rm output/newfile.json
rm output/check.txt
fi
fi
fi
Java код
public static void filecheck() throws Exception {
Process p = Runtime.getRuntime().exec("sh "+directory+"fileChangeCheck.sh");
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader errorReader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
line = "";
while ((line = errorReader.readLine()) != null) {
System.out.println(line);
}
}
Сообщение об ошибке
$ java -jar retrieve.jar
fileChangeCheck.sh: line 12: syntax error near unexpected token `('
fileChangeCheck.sh: line 12: `diff <(head -n -3 output/current.json) <(head -n -3 output/newfile.json) > output/check.txt'
Большое спасибо