Mozliwosc wywolywania komend terminala z poziomu kodu w javie

0

Chcialem napisac sobie programik, ktory pozwoli mi z poziomu pliku javy wywolywac komendy w terminalu i wyswietlac to co jest zwracane przez te komendy w konsoli. O to moj kod:

import java.lang.*;
import java.io.*;

public class oraexec {
	
	public static void execCommand(String command) throws Exception {
		Process p = Runtime.getRuntime().exec(command);
	
		String s = "";
		p.waitFor();
		BufferedReader stdInput = new BufferedReader(new InputStreamReader(
				p.getInputStream()));
		BufferedReader stdError = new BufferedReader(new InputStreamReader(
				p.getErrorStream()));

		System.out.println("Wyjście polecenia:\n");
		while ((s = stdInput.readLine()) != null)
			System.out.println(s);
		System.out.println("Wyjście błędów:\n");
		while ((s = stdError.readLine()) != null)
			System.out.println(s);
		
	}
	public static void main(String [] args) throws Exception{
		execCommand("/bin/bash -c cd Desktop");
		execCommand("/bin/bash -c ls");
	}
}

I teraz zalozmy ze chcialbym przejsc sobie na swoj pulpit i za pomoca ls wyswietlic wszystkie pliki, ktore tam mam w konsoli.Normalnie w terminalu by sie to odbylo poprzez :
cd Desktop
ls
.......//tu by sie pojawily katalogi/pliki z pulpitu.

I teraz chcialbym zrobic cos takiego w swoim kodzie. To co wrzucilem u gory nie dziala dobrze gdyz za kazdym razem
Process p = Runtime.getRuntime().exec(command); wykonuje nowy process
w mainie przejscie do cd Desktop wykonuje sie w ramach jednego procesu
a wyswietlanie dostepnych plikow w ramach drugiego(czyli nie wyswietla mi listy plikow z Desktop tylko z katalogu biezacego)

Czy ktos moglby mi poradzic jak to zmienic?

0
  1. Chainuj komendy tak żeby zajednym skryptem wywołać całość
  2. Napisz własny terminal który będzie np. wiedział jakie jest twoje CWD.
  3. Otwórz jedną konsolę, przechwyć do niej strumienie wejscia i wyjścia i po prostu sie z nią komunikuj.
0

Chainuj komendy- moglbys rozwinac ta mysl zebym wiedzial o czym sobie podoczytywac?
To jak otowrzyc jedna konsole to rozumiem, ale jak do niej przechwycic strumienie we/wy?
Z pewnych wzgledow intersuje mnie opcja dostepu do terminala, a nie napisanie wlasnego.

0
  1. W linku który podałeś masz pokazane jak za jednym zamachem uruchomić więcej niż jedną komendę
  2. Pokaż jak uruchamiasz konsolę i sprawdź czy obiekt który dostajesz nie ma aby czasem metod zwracajacych Input/Output Stream.
0

Runtime.getRuntime().exec("/bin/bash -c Your Command"); - znalezione tutaj
http://stackoverflow.com/questions/15356405/how-to-run-a-command-at-terminal-from-java-program
Istnieje duza szansa ze robie to w zly sposob

p.getInputStream()- czy chodzi Ci o wywolanie takiej metody na rzecz mojego procesu?

1

Chłopie czy ty grasz tu w 100 pytań czy próbujesz coś zaprogramować? Odpal IDE i sprawdź zamiast zadawać głupie pytania. Zobacz co sie da z tego streama wyciągnąć/wlożyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1