@jonalv уверен, я его отредактирую. По сути, exec не вызывает оболочку, а исполняемый файл. Если вы хотите выполнить команды оболочки, вам нужно вызвать оболочку и передать ей команды для выполнения. Ответ Феми показывает, как вызвать оболочку и выполнить сон и эхо.
аюсь запустить команды командной строки из Java, и быстрая проверка работоспособности позволила мне понять, что причина, по которой у меня возникают проблемы, заключается в том, что я не могу получитьpr.waitFor()
позвоните ниже, чтобы работать. Эта программа заканчивается менее чем за 30 секунд и ничего не печатает после «foo:». Я ожидал, что это займет чуть более 30 секунд и напечатает случайное число после «foo:». Что я делаю неправильно?
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Sample {
public static void main(String[] args) throws Exception {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("sleep 32; echo $RANDOM");
pr.waitFor();
BufferedReader input = new BufferedReader(
new InputStreamReader(pr.getInputStream()));
String line=null;
StringBuilder s = new StringBuilder();
while((line=input.readLine()) != null) {
System.out.println(s);
s.append(line);
}
System.out.println("foo: " + s.toString());
}
}