Avatar billede sarid Nybegynder
23. januar 2002 - 18:38 Der er 10 kommentarer

Udførelse af shell kommandoer med Java

Hvordan kan man, ved at bruge Java, udføre shell kommandoer somom man gjorde det ind fra shellen?
Avatar billede sarid Nybegynder
23. januar 2002 - 18:38 #1
Under Linux
Avatar billede carstenknudsen Nybegynder
23. januar 2002 - 18:48 #2
Det kan du gøre som følger, og det duer
også under Windows, og hvad ved jeg.
Her skrives evt fejl i kommandoen ud
til skærmen, du kan naturligvis reagere
anderledes (der kan kastes IOExceptions).
String cmd= "..."; // din kommando                           
Process p = Runtime.getRuntime().exec( cmd );
InputStream pin = p.getErrorStream();
InputStreamReader cin = new InputStreamReader( pin );
BufferedReader in = new BufferedReader( cin );
String s;
if ( ( s = in.readLine() ) != null ) {
  System.out.println( "Error:" );
  System.out.println( s );
  while ( ( s = in.readLine() ) != null ) {
    System.out.println( s );
  }
}
Avatar billede sarid Nybegynder
23. januar 2002 - 19:21 #3
Jet får kun fat i UNIX processens beligenhed i hukommelse. Jeg får ikke resultater hvis jeg skriver f.eks.

String Cmd = "whoami";
Process p = Runtime.getRuntime().exec(Cmd);
System.out.println(p);

Jeg burde kunne se mit bruger navn ved at anvende kommandoen whoami.
Hvad skyldes det?
Avatar billede carstenknudsen Nybegynder
23. januar 2002 - 19:54 #4
Du skal ikke skrive p ud, den giver ingen
mening. Hvis kommandoen skriver til output
skal du læse fra input. p.getInputStream()
giver dig en stream fra hvilken du kan
læse output fra processen. I eksemplet
ovenfor læses fejlbeskeder. Hvis du er
interesseret i at få information og
brugernavn (whoami) kan du bruge
System.getProperty("user.name")
der også virker under Windows etc.
Avatar billede professoren Nybegynder
24. januar 2002 - 11:50 #5
Du glemte at sige, hvilket shell du bruger!! UNIX; LINUX, WINDOWS; DOS..??

Men det er rigtig  nok med system.out ....
Avatar billede carstenknudsen Nybegynder
24. januar 2002 - 11:58 #6
professor: det  har ingen betydning hvilken shell
der bruges ej heller platform har nogen betydning.
Har du læst de tidligere indlæg i spørgsmålet?
Avatar billede sarid Nybegynder
24. januar 2002 - 12:15 #7
Som sagt skal det anvendes på Linux.

Jeg vil gerne have at mit Java program kan fortolke de kommandoer, der bliver indtastet af brugeren. Efter brugeren indtaster f.eks. "ls" eller "whoami" og trykker på return knappen, bliver kommandoen udført som on den blev skrevet direkte i shellen.
Avatar billede carstenknudsen Nybegynder
24. januar 2002 - 12:35 #8
Ovenstående forklarer hvordan du håndterer systemkald.
Tænker du at der skal læses input fra en shell eller skal
kommendoerne afgives i en GUI eller hvordan har du
tænkt dig det? Det er f.eks. let at smide output fra
din Process til kommandolinien hvis det er det der er
planen.
Avatar billede sarid Nybegynder
01. februar 2002 - 14:31 #9
>> carstenknudsen :: Det er nemlig det derer planen. Hvordan lave man ovenstående?
Avatar billede carstenknudsen Nybegynder
04. februar 2002 - 15:50 #10
Jeg slog lige op i manualsiderne og du skal
istedet benyttet en anden form af exec kaldet:
exec("kommando", null, new File("hjemmedirektoriet"));
du skal så sørge for at det sidste argument er det
direktorie hvor det skal se ud som om programmet
bliver eksekveret. I stedet for null kan du give en
String[] med environment variable ("jkfjdla=kjfldjl")
hvis dit program har brug for det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester