• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

Java PATH auslesen

Thorsten-K

Jonagold
Registriert
11.08.05
Beiträge
23
Hallo,

ich habe ein kleines Problem den Pfad aus Java heraus auszulesen.

System.out.println(System.getenv("PATH"));
---> /usr/bin:/bin:/usr/sbin:/sbin

Im Terminal gibt es jedoch weitere Einträge: echo $PATH
---> /sw/bin:/sw/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/bin:/usr/texbin:/usr/X11R6/bin

Wie komme ich aus Java an den gesamten Pfad? Ich vermute, er wird aus der .profile oder .bash_rc erweitert. ...

Vielen Dank
Thorsten
 
Wie komme ich aus Java an den gesamten Pfad? Ich vermute, er wird aus der .profile oder .bash_rc erweitert. ...

Damit wirst du recht haben.

Ob Java eine native Funktion dafür anbietet, glaube ich eher nicht. Aber vielleicht kommst du durch starten einer neuen Shell per System.execute() und durch ausführen (Und Abfangen der Ausgabe) von "echo $PATH" in dieser Shell an das gewünschte Ergebnis.

Alternative wäre vielleicht noch, die .bash_rc selber zu parsen - wäre allerdings etwas umständlich.
 
Hallo Kenny.

Stimmt, aber die .bash_rc zu parsen wäre nicht nur umständlich, sondern auch fehleranfällig. An System.execute() habe ich auch schon gedacht, aber die Ergebnisse sind leider nicht so, wie gedacht :-(

echo $PATH -> $PATH
sh -c echo $PATH --> (leer)
sh -c \"echo $PATH\" --> (nichts? kein stdout/stderr ??)


Grüße
Thorsten
 
Code:
	public BufferedReader runCommand(String[] cmd, final int timeout) throws Throwable {

		final String[] command = cmd;

		final Thread runcmd = new Thread() {
			@Override
			public void run() {
				try {
					String s = null;
					ExecuteCommand.this.process = Runtime.getRuntime().exec(
							command);					
					if(timeout > 0) {
						long startTime = System.currentTimeMillis();
						while(System.currentTimeMillis() - startTime < timeout) {
							try {
								process.exitValue();
								break;
							} catch(IllegalThreadStateException e) {
							}
							try {
								Thread.sleep(50);
							} catch(InterruptedException e) {
							}
						}
						try {
							process.exitValue();
							int i = process.exitValue();
							if (i == 0) {
								cmdOutput = new BufferedReader(
										new InputStreamReader(
												ExecuteCommand.this.process
														.getInputStream()));
							}
							else {
								ExecuteCommand.this.cmdErrOutput = new BufferedReader(
										new InputStreamReader(
												ExecuteCommand.this.process
														.getErrorStream()));
								// read the output from the command
								while ((s = ExecuteCommand.this.cmdErrOutput
										.readLine()) != null) {
									System.err.println(s);
								}
							}
						} catch(IllegalThreadStateException e) {
							System.err.println("Command: " + command[2]
									+ " did not terminate in time");
							process.destroy();
							process.waitFor();
							cmdOutput = null;
						}
					
					} else {
						int i = ExecuteCommand.this.process.waitFor();
						if (i == 0) {
							cmdOutput = new BufferedReader(
									new InputStreamReader(
											ExecuteCommand.this.process
													.getInputStream()));
						}
						else {
							ExecuteCommand.this.cmdErrOutput = new BufferedReader(
									new InputStreamReader(
											ExecuteCommand.this.process
													.getErrorStream()));
							// read the output from the command
							while ((s = ExecuteCommand.this.cmdErrOutput
									.readLine()) != null) {
								System.err.println(s);
							}
						}
					}
				}
				catch (Exception e) {
					System.err.println(e);
				}
			}
		};

		runcmd.start();
		runcmd.join(TIMEOUT);

		return cmdOutput;
	}