# System.exec() Programm mit mehreren Parametern



## Killi (6. Apr 2009)

Hi Leute,

ich benutze Linux und versuche über den exec()-Befehl das Programm "xmms-shell" anzusprechen.
Ich möchte eine MP3-Datei in meine Playlist laden.

Der Befehl dazu lautet z.Bsp.:


```
xmms-shell -e 'load file://home/nutbra/mp3/test.mp3'
```

Ich habe extra schon alle Leerzeichen aus dem FilePath entfernt, ich denke es liegt an den Hochkommata.

Mein Code:


```
String[] command = { "xmms-shell", "-e", "\'load file://home/nutbra/mp3/test.mp3\'" };
		try {
				// Playlist leeren
				Runtime.getRuntime().exec("xmms-shell -e clear"); // Das funktioniert!
				
				// Datei hinzufügen
				Process bool = Runtime.getRuntime().exec(command);
				BufferedReader procout = new BufferedReader( new InputStreamReader(bool.getInputStream()) );
				String result="";
				while ((result = procout.readLine()) != null) {
			        	System.out.println(result);
				}
				System.out.println("Fertig");
		}
		catch (Exception ex) {
			System.out.println("Error: " + exec);
			ex.printStackTrace();
		}
```

Dieser Code liefert mir: rein gar nichts! Einfach nur "Fertig", jedoch ist die Rückgabe des exec-Befehls null. Wenn ich den Befehl wie er oben steht in der Konsole ausführe, klappt alles prima.

Wie gesagt - erst dachte ich Leerzeichen. Habe ich entfernt. 
Dann dachte ich Hochkommata - habe ich escaped.
An was kann es denn noch liegen? Ich bekomm es nicht hin....irgend ein Trick muss doch dahinter stecken...

Über Hilfe wäre ich sehr dankbar...


----------



## Matt (6. Apr 2009)

Also ich hab leider gerade keinen Linux PC rumstehen, um des mal schnell zu testen und mit zu lösen, daher kann ich dir nur ne stinknormale Windows erklärung geben. im Prinzip jedoch sollten diese kaum unterschiede darstellen ^^ es muss immer einen weg geben.

Hier mal ein Beispiel wie es unter windows wunderbar klappt den Befehl "dir" (unter Linux ls) auszuführen.....

[highlight=Java]public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String cmd = "cmd /c dir";
        Process process = Runtime.getRuntime().exec(cmd);
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String bla = "";
        while((bla = reader.readLine())!= null){
            System.out.println(bla);
        }
        System.out.println("Fertig");
    }[/highlight]

wie das mit der xmms ausschaut ^^ kA wenn die anderen hier net schneller sind find ich es gern morgen mal heraus...

so Far
Matt


----------



## Killi (6. Apr 2009)

Hi und danke für deine Antwort,

oben in meinem Code habe ich ja bereits


```
xmms-shell -e clear
```

ausgeführt und das funktioniert ja alles bestens - es liegt nur leider wahrscheinlich wirklich an den Anführungszeichen.
Daher zwar danke für deinen Tip, aber nur ein "ls" funktioniert bestens (leider oder nicht leider...).

Ich weiß nur nicht wie ich den Befehl ausführen muss oder warum er nicht klappt...


----------



## Wildcard (6. Apr 2009)

Schonmal so versucht?
[HIGHLIGHT="Java"]String[] command = { "xmms-shell", "-e", "load", "file://home/nutbra/mp3/test.mp3" }[/HIGHLIGHT]


----------



## Killi (6. Apr 2009)

Wildcard hat gesagt.:


> Schonmal so versucht?
> [HIGHLIGHT="Java"]String[] command = { "xmms-shell", "-e", "load", "file://home/nutbra/mp3/test.mp3" }[/HIGHLIGHT]



Ja, auch schon. Selbes Problem, Ausgabe null...wobei hier hierzu sagen muss, per Konsole erwartet er nach dem -e definitiv load und Pfad in Anführungszeichen!

Also so


```
xmms-shell -e 'load file://home/nutbra/mp3/test.mp3'
```

anders macht er es auch per Konsole nicht, das "load file://home/nutbra/mp3/test.mp3" ist ja nur ein Wert für den Parameter "e"...wäre dieses Aunführungszeichen nicht hätte ich wahrscheinlich auch keine Probleme


----------



## Wildcard (6. Apr 2009)

Eigentlich sollte das automatisch gequoted werden, also lass mal die ' weg.


----------



## Killi (6. Apr 2009)

Moment, nicht dass wir aneinander vorbei reden...

Dass es automatisch gequoted wird, ist bei Leerzeichen im Dateipfad ja ok, aber nicht im Befehl selbst, oder? Woher weiß er, was gequoted werden soll u. was nicht?

Jedenfalls ging ich gerade davon aus dass ich das schon probiert hätte...aber irgendwie....1000 Dank, es funktioniert!!!!!

Ich hatte es die ganze Zeit ohne das String-Array probiert, jede Möglichkeit durchgegangen etc...aber so tut es:


```
String[] command = { "xmms-shell", "-e", "load file://home/nutbra/mp3/test.mp3" };
```

Danke nochmals


----------



## Wildcard (6. Apr 2009)

Du trennst die einzelnen Argumente doch durch Array Einträge. Jeder Eintrag sollte automatisch gequoted werden.


----------



## Killi (6. Apr 2009)

du warst zu schnell im lesen - hab den Post gerade nochmal bearbeitet  Danke!


----------

