2015-06-27 5 views
0

Я попытался запустить .sh-файл из моего java-кода. Я видел подобные вопросы (How to run Unix shell script from Java code?) и пробовал ответы, которые там были написаны. Тем не менее, я ожидаю, что значение завершения процесса будет 0 (выгрузить нормально), в то время как на самом деле я получил 127. Вот мой код:Запуск .sh от Java-кода

public int performATRs() throws IOException{ 

    String[] command = {"sh", "/ThematicAnalysis/flexiTerm/FlexiTerm.sh"}; 
    Process process = Runtime.getRuntime().exec(command); 
    InputStream inputStream = process.getInputStream(); 
    InputStreamReader streamReader = new InputStreamReader(inputStream); 
    BufferedReader bufReader = new BufferedReader(streamReader); 
    try{ 
     process.waitFor(); 
     System.out.println("Waiting..."); 
     System.out.println("Returned Value :" + process.exitValue()); 
    }catch(InterruptedException e){ 
     System.out.println(e.getMessage()); 
    } 
    while(bufReader.ready()) 
     System.out.println(bufReader.readLine()); 
    return process.exitValue(); 
} 

Я попытался запустить FlexiTerm.sh из моего кода Java. Он работает, когда я запускаю его с терминала. Большое спасибо за вашу помощь :)

+0

Не работает означает? Нет вывода или вы получаете какое-либо исключение? – TheCodingFrog

+0

Благодарим вас за ответ. Когда я попытался вернуть process.exitValue(), я получил 1 вместо 0 (нормальное завершение) @ my-thoughts – bohr

+0

Вы используете только один поток для этого кода, а затем блокируете этот единственный поток, вызывая 'waitFor() 'в какой-то момент, пока ваш процесс не сможет передать вам какую-либо информацию. Рассмотрим 1) получение BufferedReader для потока ошибок, а также входного потока, начать чтение из потоков ** в потоках своих собственных ** и ** перед вызовом 'waitFor()'. –

ответ

1

127 означает, что он не смог выполнить /ThematicAnalysis/flexiTerm/FlexiTerm.sh, вам следует дважды проверить правильность пути к этому сценарию. Я подозреваю, что это не так, учитывая, что система в стиле Unix обычно не имеет директорию верхнего уровня с именем «ThematicAnalysis». Если вы ищете этот скрипт в местоположении по отношению к рабочему каталогу вашей Java-программы, вам следует удалить ведущую косую черту.

Смежные вопросы