Estoy llamando a programas de línea de comandos conectados por pipes. Todo esto funciona en Linux con seguridad.Java exec() no devuelve el resultado esperado de los comandos conectados de pipes
Mi método:
protected String execCommand(String command) throws IOException {
String line = null;
if (command.length() > 0) {
Process child = Runtime.getRuntime().exec(command);
InputStream lsOut = child.getInputStream();
InputStreamReader r = new InputStreamReader(lsOut);
BufferedReader in = new BufferedReader(r);
String readline = null;
while ((readline = in.readLine()) != null) {
line = line + readline;
}
}
return line;
}
Si estoy llamando a algún archivo gato | grep asd, estoy obteniendo el resultado esperado. Pero no todos los comandos funcionan correctamente. Por ejemplo con esto:
cat /proc/cpuinfo | wc -l
o esto:
cat /proc/cpuinfo | grep "model name" | head -n 1 | awk -F":" '{print substr($2, 2, length($2))}
el método devolverá nulo. Supongo que este problema depende de los comandos de formato de salida como cabeza, cola, wc, etc. ¿Cómo puedo evitar este problema y obtener el resultado final de la salida?
Inútil (utiliza * 3) del 'cat'. –
@Dennis - de hecho. ¡Bien descrito! –
@Bobby Lo he intentado, esto no ayuda. – Pawka